Erlang的语言基础看起来你是消息处理语言,用一句多年以前学习计算机理论时提到的话来说,就是“以数据为中心的计算”(相对于以指令为中心的计算来说)。其实面向对象是以指令为中心向以数据为中心走了一步,而ng的函数,特别是Erlang类似于C++中的重载,则向数据为中心走得更远一些。
Erlang的函数看起来就象下面的样子:
函数名(参数形式1) -> 表达式;
......
函数名(参数形式n) -> 表达式.
上面的函数名是相同的,即这里我们说到的是一个函数的定义,每一条叫做一个子句,子句以分号结束,整个函数以点号结束。当然,整个句子可以只有一个子句。
调用的时候,实参(如果还叫做实参的话)与参数形式进行匹配,匹配不仅是基于C++中的参数个数及参数类型的重载,它是Erlang自身匹配基础上的重载,在Erlang的世界里,调用一个函数,它选择子句的依据,是能够匹配。如果匹配得上,则返回"->"后面的表达式的值。如果一个都匹配不上,会出现,嗯运行时错误,是的,一个exception。
函数子句参数形式顺序是重要的,它只能至上而下的进行匹配,所以在写函数的时候,要注意顺序。
下面是一个简单的例子:
- geometry.erl
- -module(geometry).
- -export([area/1]).
- area({rectangle, Width, Height}) -> Width * Height;
- area({circle, R}) -> 3.13 * R * R.
调用时的方法如下:
- c(geometry).
- geometry:area({rectangle, 10, 3}).
- geometry:area({circle, 5}).
阅读(5489) | 评论(0) | 转发(0) |