为什么erlang不支持这样的表达式:mysum(32)(1)

Jam*_*Lee 0 erlang

我是Eralng的新人.得到一个关于应用函数的一些小问题,
确定了一个定义的函数:

mysum(X) -> fun(Y)-> X + Y end.
Run Code Online (Sandbox Code Playgroud)

然后尝试这样打电话

mysum(32)(332) 
Run Code Online (Sandbox Code Playgroud)

得到错误

* 1: syntax error before: '('
Run Code Online (Sandbox Code Playgroud)

所以我不得不这样做

apply(mysum(32),[333])
Run Code Online (Sandbox Code Playgroud)

要么

M = mysum(32), M(333)
Run Code Online (Sandbox Code Playgroud)

但我想知道更多,为什么它不支持,有什么缺点

Pas*_*cal 6

正如您所料,mysum返回一个函数.您必须将括号内的括号括起来以满足erlang解析器:

(mysum(32))(332)
Run Code Online (Sandbox Code Playgroud)

这个拼写显然不是模棱两可的.

你的表达似乎不含糊,因为你知道mysum(32)是一个函数,但是类型是在运行时在erlang中解决的,所以解析器不知道mysum是什么(32),它在这里需要一些帮助才能知道它必须做什么:括号,apply或中间变量,但它可以是运算符或分隔符.