2014-01-24 2 views
5

В C#, я мог бы объявить перечисление как это:Elixir эквивалент C#, Java, C++ перечисление

enum QuestionType { Range, Text }; 

Как бы я сделать это в эликсира? То, что я хотел бы сделать, это быть в состоянии шаблон матча что-то вроде этого:

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

Или что-то вроде этого, где QuestionType.range является числовой константой, поэтому оно может быть эффективно хранить в БД или сериализованная как межд к JSON.

+0

Пытались ли вы # эликсира-Лэнга на Freenode? Даже Хосе Валим мог ответить на заданный там вопрос. Хотя хорошо видеть больше вопросов Эликсира здесь, на SO. – unblevable

+6

Собственно, задавать вопросы в SO очень хорошо, потому что это может помочь другим в будущем. :) И я часто проверяю здесь тоже! –

ответ

8

Вы можете использовать атомы, где перечисления используются на других языках. Например, вы можете:

# 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 
Смежные вопросы