在erlang模块内使用匿名函数时出现问题

在erlang模块内使用匿名函数时出现问题,erlang,anonymous-function,Erlang,Anonymous Function,我在erlang中使用匿名函数时,一个问题引起了我的注意。 该函数定义如下 -module(qt). -export([ra/0]). ra = fun() -> 4 end. 然而,这是行不通的 -export(Ra/0]). Ra = fun() -> 4 end. 这也不是 谁能告诉我为什么erlang表现出这种行为 Erlang模块不能导出变量,只能导出函数 通过导出只返回值的零参数函数(匿名函数是有效的返回值),可以实现类似于导出变量的功能: 现在,您可以从s

我在erlang中使用匿名函数时,一个问题引起了我的注意。 该函数定义如下

-module(qt). 
-export([ra/0]). 
ra = fun() -> 4 end. 
然而,这是行不通的

-export(Ra/0]). 
Ra = fun() -> 4 end. 
这也不是
谁能告诉我为什么erlang表现出这种行为

Erlang模块不能导出变量,只能导出函数

通过导出只返回值的零参数函数(匿名函数是有效的返回值),可以实现类似于导出变量的功能:

现在,您可以从shell中使用它:

1> c(qt).
{ok,qt}
2> qt:ra().
#Fun<qt.0.111535607>
3> (qt:ra())().
4
1>c(qt)。
{好的,qt}
2> qt:ra()。
#乐趣
3> (qt:ra())()。
4.

尽管Erlang将这些名称作为变量调用,但它们的值无法更新。因此,公开这样的内容是没有用的。所以erlang认为这是对变量的赋值,而不是函数,因此拒绝导出它?@draklor40甚至拒绝编译。在Erlang模块中,变量赋值只能出现在函数中。@Dmitry Erlang永远不允许您更新任何变量。你什么意思?draklor40您只能导出函数,仅此而已。主要错误是无法从OP.Erlang编译示例代码。Erlang不允许您在模块体中编写类似赋值的代码。模块不是脚本,它们只定义东西(函数、类型、记录)并最终导出东西。@niahoo Erlang中没有赋值操作,只有绑定。也没有重新绑定,在第一个名称之后使用名称只是检索绑定到该名称的值。在Erlang中也不可能覆盖值。所有这一切都意味着除了ETS这样的特殊存储之外,Erlang中没有破坏性的更新。
1> c(qt).
{ok,qt}
2> qt:ra().
#Fun<qt.0.111535607>
3> (qt:ra())().
4