大概一個非常基本的藥劑的問題時之外,功能沒有定義,返回一個匿名功能
我想從1至10,並輸出給IO.puts
第一總和的偶數我嘗試這樣做:
1..10
|> Enum.filter(fn (x) -> rem(x, 2) == 0 end)
|> Enum.sum
|> IO.puts
它按預期工作。
然後我嘗試界定功能的模塊裏面這樣:
defmodule Test do
def is_even(x) do
rem(x, 2) == 0
end
end
1..10
|> Enum.filter(Test.is_even)
|> Enum.sum
|> IO.puts
但是,這使我對編譯以下錯誤:
** (UndefinedFunctionError) undefined function: Test.is_even/0
Test.is_even()
tmp/src.exs:8: (file)
(elixir) src/elixir_lexical.erl:17: :elixir_lexical.run/3
(elixir) lib/code.ex:316: Code.require_file/2
爲什麼找is_even/0當它應該(在我的意圖)尋找is_even/1?
我不明白這是爲什麼,特別是因爲這樣做:
defmodule Test do
def hello(x) do
IO.puts(x)
end
end
Test.hello("Hello World!")
作品完全罰款。
我也只是發現了這個工程:
defmodule Test do
def is_even() do
fn (x) -> rem(x, 2) == 0 end
end
end
1..10
|> Enum.filter(Test.is_even)
|> Enum.sum
|> IO.puts
爲什麼使用它的函數的返回作爲函數的使用,而不是使用函數本身?
有沒有辦法讓這項工作,而不必返回函數內部的匿名函數?
這解釋了爲什麼他們正在嘗試做是不行的,但不知道如何真正使其發揮作用。 –
我回答了第一個問題。 –