2016-12-08 1 views
2

Есть простое суммирование значений в списке:Почему я не могу использовать параметры по умолчанию в этом суммировании списка эликсиров?

defmodule ListMath do 
    def sum_list([head | tail], accumulator) do 
    sum_list(tail, head + accumulator) 
    end 

    def sum_list([], accumulator) do 
    accumulator 
    end 
end 

Но называя это требует прохождения в значении для аккумулятора, например:

IO.puts ListMath.sum_list([4,5,6],0) 
15 

Я хотел бы назвать это так:

не
IO.puts ListMath.sum_list([4,5,6]) 
** (UndefinedFunctionError) function ListMath.sum_list/1 is undefined... 

Если изменить его принять значение по умолчанию для аккумулятора пар, он больше не компилируется:

defmodule ListMath do 
    def sum_list([head | tail], accumulator // 0) do 
    sum_list(tail, head + accumulator) 
    end 

    def sum_list([], accumulator) do 
    accumulator 
    end 
end 
  • Я использую Elixir 1.3.4.
  • Я видел this question еще в Elixir 0.12, который кажется довольно связанным, но все еще не понимает.
+0

// vs \\ - простая типографская ошибка, и поэтому этот вопрос должен быть закрыт. Голосовать, чтобы закрыть. –

ответ

4

Вы находитесь на правильном пути там, в последнем примере.

Значения по умолчанию в эликсире диктуются \\ не //. Так что вы в вашем случае:

defmodule ListMath do 
    def sum_list([head | tail], accumulator \\ 0) do 
    sum_list(tail, head + accumulator) 
    end 

    def sum_list([], accumulator) do 
    accumulator 
    end 
end 

Вы можете даже, Что называется определение функции головы, которая диктует ожидаемые переменные метода, например,

defmodule ListMath do 
    def sum_list(list, acc \\ 0) 
    def sum_list([head | tail], accumulator) do 
    sum_list(tail, head + accumulator) 
    end 

    def sum_list([], accumulator) do 
    accumulator 
    end 
end 

Таким образом, с первого взгляда можно сказать, что функция головы метод выглядит без того, чтобы найти, где создается значение по умолчанию.

+0

Ошибка новичков, поэтому спасибо за ответ! –

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