Fun定义

函数如下定义:

fun
   (Pattern1, ..., PatternN) [when GuardSeq1] ->
       Body1;
    ....
   (PatternK1, ..., PatternKN) [when GuardSeqK] ->
       BodyK
end

 

也可以依据已经定义的函数定义声明fun

fun Name/Arity
fun Module:Name/Arity

 

 

对于第一种形式没有指定Module,其会隐式的判断对应的Module,可能是import的Module,也可能是当前Module。

(注意:推荐不要使用import,容易混淆,同时使用Module:Name/Arity可以保证加载的代码总是最新版本的代码)

其实以上只是一个语法糖,等同于下面的形式:

 

fun(Arg1, Arg2, ...) -> Module:Name/Arity(Arg1, Arg2, ...) end

 

 

对于fun调用可以采用多种形式,比如我们要将L2 [3, 4]追加到L1 [1, 2]:

1, Fun1 = fun(L1, L2) -> lists:append(L1, L2) end, Fun1([1, 2], [3, 4]).
2, fun(L1, L2) -> lists:append(L1, L2)([1, 2], [3, 4]).
3, Fun2 = {lists, append}, Fun2([1, 2], [3, 4]).(不推荐使用)
4, fun lists:append/2([1, 2], [3, 4])

posted @ 2010-10-17 19:30  litaocheng  阅读(278)  评论(0)    收藏  举报