2014-02-03 1 views
3

Я работаю над «Программированием эликсира», и я наткнулся на упражнение «Упражнение: функции 2». Короче говоря, в основном код функции, которая испускает Fizzbuzz, если первые два параметра равны 0, Fizz, если первый параметр равен 0, Buzz, если второй параметр равен 0 и третий параметр, если ни один из первых двух не равен нулю. Я пришел с этим:Могу ли я избежать чередующихся параметров в этой функции анонимного эликсира?

fizzbuzztest = fn 
    {0,0,_} -> "FizzBuzz" 
    {0,_,_} -> "Fizz" 
    {_,0,_} -> "Buzz" 
    {_,_,v} -> "#{v}" 
end 

Названный так:

fizzbuzztest.({0,0,8}) # "FizzBuzz" 

Но мне интересно, - есть какой-то способ сделать это без того, чтобы кортеж параметров? Кажется, должен быть какой-то способ передать три аргумента и обработать совпадение шаблонов, но я еще не нашел его. Любые предложения от тех, кто более опытен с Elixir, будут приветствоваться.

ответ

5

Вы можете решить эту конкретную упражнение с:

fizzbuzztest = fn 
    0,0,_ -> "FizzBuzz" 
    0,_,_ -> "Fizz" 
    _,0,_ -> "Buzz" 
    _,_,v -> "#{v}" 
end 
+0

Не знаю, почему я предположил, что я должен был бы кортеж параметров, чтобы получить эту работу. Благодарю. –

+0

Ранние примеры 'fn' не дают понять, что вы можете сопоставить аргументы с образцом, как указано выше. Почти все находятся в форме 'a = fn (arg1, argn) end' –

Смежные вопросы