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

时间:2019-07-23 11:54:19

标签: erlang return-type higher-order-functions

我在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

我无法调用返回的方法吗?

3 个答案:

答案 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