2013-08-23 67 views
2

当我遇到问题时,我正在使用erlang中的匿名函数。 功能定义如下在erlang模块中使用匿名函数时遇到问题

-module(qt). 
-export([ra/0]). 
ra = fun() -> 4 end. 

然而,这并不正常工作

-export(Ra/0]). 
Ra = fun() -> 4 end. 

而且也不该 谁能告诉我,为什么二郎就存在这种行为?

回答

5

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

可以实现类似于通过出口零点的参数,仅仅返回一个值的函数输出变量的东西(一个匿名函数是一个有效的返回值):

-module(qt). 
-export([ra/0]). 
ra() -> 
    fun() -> 4 end. 

现在,您可以从shell使用:

1> c(qt). 
{ok,qt} 
2> qt:ra(). 
#Fun<qt.0.111535607> 
3> (qt:ra())(). 
4 
+1

尽管Erlang将这些名称作为变量进行调用,但它们的值无法更新。所以暴露这种东西是没有用的。 –

+0

所以erlang认为这是赋值给一个变量而不是一个函数,因此拒绝导出它? – draklor40

+0

@ draklor40拒绝编译,甚至。在Erlang模块中,变量赋值只能出现在函数中。 – legoscia

相关问题