2013-08-23 68 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

相關問題