我写了以下简单的模型:
defmodule Simple do
def add(a, b) do a + b end
som = fn(x, y) -> x + y end
def oper_array(fct, arr, init) do
Enum.scan(arr, init, fct.())
end
end
但是
Simple.oper_array(a, 0, Simple.som) or
Simple.oper_array(a, 0, Simple.add)
总是给予
(UndefinedFunctionError) undefined function Simple.som/0 or
(UndefinedFunctionError) undefined function Simple.add/0
如果我像这样编写函数'oper_array',结果相同:
Enum.scan(arr, init, fct)
我该如何编写'oper_array'函数?
答案 0 :(得分:1)
我首先要定义没有匿名函数的模块。
defmodule Simple do
def add(a, b), do: a + b
def oper_array(fct, arr, init) do
Enum.scan(arr, init, fct)
end
end
Simple.oper_array(a, 0, Simple.som)
的问题:
&
运算符不是必需的,因为它已经是上下文中可用的匿名函数表达式,如下所示。 (我认为) som/2
函数在模块内被声明为匿名函数,因此它不是公开可用的函数,因此不能在定义它的上下文之外使用。 这应该有效:
a = [1,2,3]
Simple.oper_array(fn(x, y) -> x + y end, a, 0)
或
a = [1,2,3]
som = fn(x, y) -> x + y end
Simple.oper_array(som, a, 0)
Simple.oper_array(a, 0, Simple.add)
的问题:
&
运算符,以将其计算为函数。 (我认为) 这应该有效:
a = [1,2,3]
Simple.oper_array(&Simple.add/2, a, 0)