7

在 C# 中,我可能会像这样声明一个枚举:

enum QuestionType { Range, Text };

我将如何在 Elixir 中做到这一点?我想做的是能够匹配这样的东西:

def VerifyAnswer(QuestionType.range, answer) do
  assert answer >= 0 && answer <= 5
end

或者类似的东西,其中QuestionType.range是一个数字常量,因此它可以有效地存储在 DB 中或序列化为 JSON 的 int。

4

1 回答 1

9

您可以在其他语言中使用枚举的地方使用原子。例如,您可以:

# use an atom-value tuple to mark the value '0..5' as a range
{ :range, 0..5 }

# group atoms together to represent a more involved enum
question = { :question, { :range, 0..5 }, { :text, "blah" } }

# use the position of an element to implicitly determine its type.
question = { :question, 0..5, "blah" }

您可以在这里使用模式匹配,如下所示:

def verify_answer(question = { :question, range, text }, answer) do
  assert answer in range
end
于 2014-01-25T06:10:29.550 回答