1.匿名fun函数
a.匿名函数与变量绑定
我们一般看到的是将一个匿名的函数赋值给一个变量:相当于这个变量就是以后的函数名。
后面就将这个变量当作函数名用即可。例如:
Double=fun(X)->2*x end.
Double(2). 结果为1.
b.匿名fun函数作为函数参数
L=[1,2,3,4].
list:map(fun(X)->2*X end,L).
总之,要匿名函数发挥作用,就必须与变量绑定,或者作为参数被传给其他函数,还有就是一定不要忘了匿名函数的函数体有个end作为其结尾。
2.函数别名的fun函数
a.本模块应用
如果要应用本模块内部的已经定义的某个函数,直接将之传递给其他函数当做参数,用如下形式
make(Name)->
register(Name,spawn(fun()->my_handler(fun no_op/1) end)).
no_op(_)->void.
my_handler(Fun)->
receive
{event,Any}->
catch Fun(Any)
end.
在my_handler()函数参数的fun no_op/1就相当是no_op(_)函数的函数别名。当赋值给一个变量以后可以用这个别名像调用任意普通函数一样的来调用这个函数。
注:本地别名fun函数与匿名fun函数在实现上很类似,它们都依赖于模块的当前版本。
b.其他模块应用
1 -module(test).
2
3 -export([test/1]).
4
5 test(X) when X > 2 -> true;
6
7 test(X) -> false.
如果在shell中应用:
注:在被调用时,它们不依赖于特定的版本。反而是总是指向引用函数的最新版本。