我有以下奇怪的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
我不能调用返回的方法吗?
hzbexzde1#
这是一个操作顺序的问题。编译器/运行时不知道从Tx(3)返回的是函数。通过在它周围添加()(Tx(3)),Tx(3)首先被求值,被视为函数,然后可以再次求值。
Tx(3)
()
(Tx(3))
tpxzln5u2#
将返回的fun放入括号中:
fun
(Tx(3))().
nzrxty8p3#
这是一个高阶函数(如闭包)
Tx= fun(A)-> G=fun()->A+33 end, G end.
Tx是arity = 1的函数,并返回名为G的函数和G,元数= 0
Tx
G
3条答案
按热度按时间hzbexzde1#
这是一个操作顺序的问题。编译器/运行时不知道从
Tx(3)
返回的是函数。通过在它周围添加()
(Tx(3))
,Tx(3)
首先被求值,被视为函数,然后可以再次求值。tpxzln5u2#
将返回的
fun
放入括号中:nzrxty8p3#
这是一个高阶函数(如闭包)
Tx
是arity = 1的函数,并返回名为G
的函数和
G
,元数= 0