Chinaunix首页 | 论坛 | 博客
  • 博客访问: 527333
  • 博文数量: 118
  • 博客积分: 2575
  • 博客等级: 大尉
  • 技术积分: 1263
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-27 09:37
文章分类

全部博文(118)

文章存档

2017年(11)

2016年(8)

2015年(1)

2014年(9)

2013年(7)

2012年(38)

2011年(14)

2010年(18)

2009年(12)

分类: IT职场

2012-10-15 20:07:25

Erlang的语言基础看起来你是消息处理语言,用一句多年以前学习计算机理论时提到的话来说,就是“以数据为中心的计算”(相对于以指令为中心的计算来说)。其实面向对象是以指令为中心向以数据为中心走了一步,而ng的函数,特别是Erlang类似于C++中的重载,则向数据为中心走得更远一些。

Erlang的函数看起来就象下面的样子:
函数名(参数形式1) -> 表达式;
......
函数名(参数形式n)  -> 表达式.
上面的函数名是相同的,即这里我们说到的是一个函数的定义,每一条叫做一个子句,子句以分号结束,整个函数以点号结束。当然,整个句子可以只有一个子句。

调用的时候,实参(如果还叫做实参的话)与参数形式进行匹配,匹配不仅是基于C++中的参数个数及参数类型的重载,它是Erlang自身匹配基础上的重载,在Erlang的世界里,调用一个函数,它选择子句的依据,是能够匹配。如果匹配得上,则返回"->"后面的表达式的值。如果一个都匹配不上,会出现,嗯运行时错误,是的,一个exception。

函数子句参数形式顺序是重要的,它只能至上而下的进行匹配,所以在写函数的时候,要注意顺序。

下面是一个简单的例子:

  1. geometry.erl
  2. -module(geometry).
  3. -export([area/1]).
  4. area({rectangle, Width, Height}) -> Width * Height;
  5. area({circle, R}) -> 3.13 * R * R.
调用时的方法如下:

  1. c(geometry).
  2. geometry:area({rectangle, 10, 3}).
  3. geometry:area({circle, 5}).
阅读(5458) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~