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

时间:2013-06-22 04:12:51

标签: erlang

我是Eralng的新人。得到一些关于应用函数的问题 假设有一个功能定义:

mysum(X) -> fun(Y)-> X + Y end.
然后尝试像这样调用

mysum(32)(332) 

收到错误

* 1: syntax error before: '('

所以我不得不

apply(mysum(32),[333])

M = mysum(32), M(333)

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

1 个答案:

答案 0 :(得分:6)

正如您所料,mysum返回一个函数。您必须将评估括在括号内以满足erlang解析器:

(mysum(32))(332)

这种拼写显然不含糊。

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