我是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)
但我想知道更多,为什么它不支持,有什么缺点
正如您所料,mysum返回一个函数.您必须将括号内的括号括起来以满足erlang解析器:
(mysum(32))(332)
Run Code Online (Sandbox Code Playgroud)
这个拼写显然不是模棱两可的.
你的表达似乎不含糊,因为你知道mysum(32)是一个函数,但是类型是在运行时在erlang中解决的,所以解析器不知道mysum是什么(32),它在这里需要一些帮助才能知道它必须做什么:括号,apply或中间变量,但它可以是运算符或分隔符.