erlang 为什么我不能直接调用返回的方法

pbpqsu0x  于 2022-12-08  发布在  Erlang
关注(0)|答案(3)|浏览(170)

我有以下奇怪的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

我不能调用返回的方法吗?

hzbexzde

hzbexzde1#

这是一个操作顺序的问题。编译器/运行时不知道从Tx(3)返回的是函数。通过在它周围添加()(Tx(3))Tx(3)首先被求值,被视为函数,然后可以再次求值。

tpxzln5u

tpxzln5u2#

将返回的fun放入括号中:

(Tx(3))().
nzrxty8p

nzrxty8p3#

这是一个高阶函数(如闭包)

Tx= fun(A)->
      G=fun()->A+33 end,
     G 
    end.

Tx是arity = 1的函数,并返回名为G的函数

G,元数= 0

相关问题