我在Erlang中遇到以下奇怪的情况:
Tx=fun(A)->G=fun()->A+33 end,G end.
我不明白为什么我不能直接调用返回的方法,而需要先将其存储在变量中:
Tx(3)(). -> 1: syntax error before: '(' //why does this not work ?
Var=Tx(3) //and this
Var() // works
我无法调用返回的方法吗?
答案 0 :(得分:3)
这是一个操作顺序问题。编译器/运行时不了解Tx(3)
返回的是一个函数。通过在其周围添加()
,Tx(3)
首先被求值,被视为一个函数,然后可以再次求值。
答案 1 :(得分:2)
将返回的fun
包装在方括号中:
(Tx(3))().
答案 2 :(得分:0)
这是一个高阶函数(如闭包)
Tx= fun(A)->
G=fun()->A+33 end,
G
end.
Tx
是一个arity = 1的函数,并返回一个名为G
的函数
和
G
,arity = 0