先看一个Erlang的规定:在Eralng中,同一个模块中的两个函数,如果她们同名但是它们的目(arity)不同,这样的两个函数被认为是完全不同的两个函数。通常情况下,这样的函数被用作辅助函数。
   fun函数就是一个匿名函数(因为他自己没有名字),但就这个匿名函数,用处却是很大的。fun既可以作为函数的参数,也可以作为函数(或者自己本身fun)的返回结果。
   现在,我们再来看一下fun函数的简单使用:

4> Triple = fun(X) -> 3*X end.
#Fun<erl_eval.6.13229925>
5> Triple(3).
9
6>

当我们定一个fun的时候,会出现 #Fun<erl_eval...> 之类的东西,我自己也不清楚,不过先不要管这个。我们继续往下看。

Triple = fun(X) -> 3*X end.
是定义一个fun,只有一个参数量,也就是只有一个目,在fun结束的时候,需要将end加在后面的。当我们要调用它的时候,直接使用Triple,然后加上参数就行了。
注:本博客的例子可能许多都是来自Joe Armstrong的《Erlang程序设计》一书,或者在原来基础上稍加改变。
   我们再来详细的学习这个fun:
1.用fun作为函数的参数
上面的例子是只有一个参数,相信大家都能看懂。现在看一下使用多个参数时的情景。

1> Hypot = fun(X, Y) -> math:sqrt(X*X + Y*Y) end.
#Fun<erl_eval.12.113037538>
2> Hypot(3, 4).
5.0
3>

很容易看懂吧,其中的math是一个模块,sqrt是其中的一个函数,是用来计算平方根的。
fun也可以有若干个不同的子句。
比如下面的星期转换:

3> Week = fun({monday}) -> {1};
3> ({tuesday}) -> {2}
3> end.
#Fun<erl_eval.6.13229925>
5> Week({monday}).
{1}
6>

2.以fun作为参数的函数
lists是标准库中的一个模块,从中导出的很多函数都是以fun作为参数的函数,比如,map,filter等。下面是一个测试:

1> L = [1, 2, 3, 4].
[1,2,3,4]
2> Double = fun(X) -> 2*X end.
#Fun<erl_eval.6.13229925>
3> lists:map(Double, L).
[2,4,6,8]
4> Even = fun(X) -> (X rem 2) =:= 0 end.
#Fun<erl_eval.6.13229925>
5> lists:filter(Even,L).
[2,4]
6> Even(8).
true
7> Even(7).
false
8> L.
[1,2,3,4]
9>

在这个例子当中,map的第一个参数即为fun。
3.

<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>

阅读(4469) | 评论(0) | 转发(0) |

0

上一篇:第一个erlang程序

下一篇:erlang语言编辑环境的搭建

相关热门文章
  • linux 常见服务端口
  • xmanager 2.0 for linux配置
  • 【ROOTFS搭建】busybox的httpd...
  • openwrt中luci学习笔记
  • 什么是shell
  • linux dhcp peizhi roc
  • 关于Unix文件的软链接
  • 求教这个命令什么意思,我是新...
  • sed -e "/grep/d" 是什么意思...
  • 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议

Erlang中的fun函数使用详解相关推荐

  1. python中subplot是什么意思_python matplotlib中的subplot函数使用详解

    python里面的matplotlib.pylot是大家比较常用的,功能也还不错的一个包.基本框架比较简单,但是做一个功能完善且比较好看整洁的图,免不了要网上查找一些函数.于是,为了节省时间,可以一劳 ...

  2. python中mat函数_python matplotlib中的subplot函数使用详解

    python里面的matplotlib.pylot是大家比较常用的,功能也还不错的一个包.基本框架比较简单,但是做一个功能完善且比较好看整洁的图,免不了要网上查找一些函数.于是,为了节省时间,可以一劳 ...

  3. python getopt_python 5种 statsPython中的getopt函数使用详解

    函数原型: getopt.getopt(args, shortopts, longopts=[]) 参数解释: args:args为需要解析的参数列表.一般使用sys.argv[1:],这样可以过滤掉 ...

  4. python explode_pandas dataframe 中的explode函数用法详解

    在使用 pandas 进行数据分析的过程中,我们常常会遇到将一行数据展开成多行的需求,多么希望能有一个类似于 hive sql 中的 explode 函数. 这个函数如下: Code # !/usr/ ...

  5. pythonsubplot_python matplotlib中的subplot函数使用详解

    python里面的matplotlib.pylot是大家比较常用的,功能也还不错的一个包.基本框架比较简单,但是做一个功能完善且比较好看整洁的图,免不了要网上查找一些函数.于是,为了节省时间,可以一劳 ...

  6. python中的iloc函数_详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据

    pandas的DataFrame对象,本质上是二维矩阵,跟常规二维矩阵的差别在于前者额外指定了每一行和每一列的名称.这样内部数据抽取既可以用"行列名称(对应.loc[]方法)",也 ...

  7. java中static修饰函数_详解java中static关键词的作用

    在java中,static是一个修饰符,用于修饰类的成员方法.类的成员变量,另外可以编写static代码块来优化程序性能:被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载 ...

  8. bootstraptable 加载完成回调函数_牛皮了!头一次见有大佬把「JavaScript中的回调函数」详解得如此清晰明了...

    前言 callback,大家都知道是回调函数的意思.但是你对这个概念应该是模模糊糊.比如Ajax,你只知道去调用返回函数,如果对callback没有理解清楚,估计你在学习Node.js后会崩溃,因为c ...

  9. oracle中substr () in,Oracle中的substr()函数使用详解及应用

    1.substr函数格式   (俗称:字符截取函数) 格式1: substr(string string, int a, int b); 格式2:substr(string string, int a ...

  10. JavaScript中立即执行函数实例详解 转载 作者:李牧羊

    javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解.这篇文章 ...

最新文章

  1. 靠Python数据分析已赚10w的本科生,附赠学习资料
  2. 十三、深入Java的Scanner类
  3. Hibernate事实:始终检查Criteria API SQL查询
  4. 什么时候用synchronized
  5. 为什么公司宁愿花25K重新招人,也不愿花20K留住老员工?
  6. MIFARE系列6《射频卡与读写器的通讯》
  7. 汉诺塔计算移动次数和消耗体力
  8. eclipse设置工作空间编码为默认utf-8
  9. 原来歌这样唱也很好听
  10. c语言中文网pdf免费下载,C语言中文网VIP教程11.9.pdf
  11. 启动react项目报找不到文件的错误
  12. Win10 分页缓冲池 过大
  13. 历代治国理政者的教科书——金木水火土的起源之书:周朝的统治大法——《洪范》...
  14. 程序员编程技术迅速提高终极攻略
  15. 应届生职场入门毒打指南
  16. AI工程师认证,看这一篇就够了
  17. 航母级app横空出世 百事哈哈狂飙蓝海
  18. 重带电粒子的能量歧离(energy straggling)
  19. CVE-2021-1732:Windows Win32k提权
  20. Java之UML类图的六种关系

热门文章

  1. 洛谷 P1490 买蛋糕 解题报告
  2. cesium加载entity图片缩放_Vue中使用vuecroper插件实现图片上传裁剪并传到SpringBoot后台接口...
  3. 在 Linux 和 Windows 下给 Tomcat 分配大内存设置方法 - 偷得浮生半日闲 - 博客频道 - CSDN.NET...
  4. 设计模式---004策略模式---【巷子】
  5. python头像截取_身份证头像截取 - osc_8plez0fy的个人空间 - OSCHINA - 中文开源技术交流社区...
  6. 线程2--主线程(main线程)
  7. android手机图标 足球球星,C罗梅西最抢眼 足球巨星们都用什么手机
  8. JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分
  9. java代码餐馆管理系统_java版餐饮管理系统
  10. 自然语言处理面试基础