先看一个Erlang的规定:在Eralng中,同一个模块中的两个函数,如果她们同名但是它们的目(arity)不同,这样的两个函数被认为是完全不同的两个函数。通常情况下,这样的函数被用作辅助函数。
fun函数就是一个匿名函数(因为他自己没有名字),但就这个匿名函数,用处却是很大的。fun既可以作为函数的参数,也可以作为函数(或者自己本身fun)的返回结果。
现在,我们再来看一下fun函数的简单使用:
当我们定一个fun的时候,会出现
Triple = fun(X) -> 3*X end.
是定义一个fun,只有一个参数量,也就是只有一个目,在fun结束的时候,需要将end加在后面的。当我们要调用它的时候,直接使用Triple,然后加上参数就行了。
注:本博客的例子可能许多都是来自Joe Armstrong的《Erlang程序设计》一书,或者在原来基础上稍加改变。
我们再来详细的学习这个fun:
1.用fun作为函数的参数
上面的例子是只有一个参数,相信大家都能看懂。现在看一下使用多个参数时的情景。
很容易看懂吧,其中的math是一个模块,sqrt是其中的一个函数,是用来计算平方根的。
fun也可以有若干个不同的子句。
比如下面的星期转换:
2.以fun作为参数的函数
lists是标准库中的一个模块,从中导出的很多函数都是以fun作为参数的函数,比如,map,filter等。下面是一个测试:
fun函数就是一个匿名函数(因为他自己没有名字),但就这个匿名函数,用处却是很大的。fun既可以作为函数的参数,也可以作为函数(或者自己本身fun)的返回结果。
现在,我们再来看一下fun函数的简单使用:
|
#Fun<erl_eval...>
之类的东西,我自己也不清楚,不过先不要管这个。我们继续往下看。Triple = fun(X) -> 3*X end.
是定义一个fun,只有一个参数量,也就是只有一个目,在fun结束的时候,需要将end加在后面的。当我们要调用它的时候,直接使用Triple,然后加上参数就行了。
注:本博客的例子可能许多都是来自Joe Armstrong的《Erlang程序设计》一书,或者在原来基础上稍加改变。
我们再来详细的学习这个fun:
1.用fun作为函数的参数
上面的例子是只有一个参数,相信大家都能看懂。现在看一下使用多个参数时的情景。
|
fun也可以有若干个不同的子句。
比如下面的星期转换:
|
lists是标准库中的一个模块,从中导出的很多函数都是以fun作为参数的函数,比如,map,filter等。下面是一个测试:
|
在这个例子当中,map的第一个参数即为fun。