首页 > Erlang快速入门 > 3.5 Erlang快速入门之元组
2013
10-29

3.5 Erlang快速入门之元组

BACK TOP文章索引

  1. 元组导读
  2. 元组定义
  3. 元组举例
  4. 共0条评论

元组导读

在本节中我们将讲述Erlang关于元组的相关知识。
在模块”tut2″中的代码风格已经很好,现在我们来看:

tut2:convert(3, inch).

看到这个是否就意味着3是英寸呢?或者3是厘米而我们想将它转换为英寸?

元组定义

在Erlang里我们可以把一些事件/事物集中在一起以便更好地理解,我们称之为元组,元组会被”{“和”}”这样一对括号包含。
或定义为:将一定数量项组成在一起,就形成了一个单一的实体,并且若干个项之间使用逗号隔开,形成的整个实体使用{}括起来,这样就形成了一个元组。这个元组的概念有点像c语言中的结构体,因为在erlang程序中并没有结构体这个概念,因此为了描述一个实体多方面的属性值的时候就引用了这个概念,我们可以把这个元组的概念和c语言中的结构体概念对比着理解。另外,一旦元组创建之后,元组项的个数就不能再变化了。其实元组就是原子。

元组举例

我们用”{inch, 3}”来表示3英寸和”{centimeter, 5}”来表示5厘米.现在我们利用元组来重新写一个关于英寸和厘米之间相互转换的程序(文件命名为:tut3.erl):

-module(tut3).
-export([convert_length/1]).

convert_length({centimeter, X}) ->
	{inch, X / 2.54};
convert_length({inch, Y}) ->
	{centimeter, Y * 2.54}.

测试一下:

1> c(tut3).
{ok,tut3}
2> tut3:convert_length({inch, 5}).
{centimeter,12.7}
3> tut3:convert_length(tut3:convert_length({inch, 5})).
{inch,5.0}
4>

注意上面的第3行,我们将5英尺转换为了厘米度量,并将其安全的转换了回去,得到了原来的值。另外这个例子还说明我们可以将一个函数的返回值作为另一个函数的参数传入。我们先在第3行这里停一下,考虑一下具体的执行情况。我们传入了{inch,5}的函数返回的结果成功的匹配了模块中的convert_length({centimeter,X}),原因在于前一个函数的返回是{centimeter,X}形式的。如果还不够清楚,那么你可以分别执行这两个函数,仔细看看他们的返回情况。
我们看了有两个部分的元组,但是元组可以有更多的部分组成,我们可以包含任何合法的Erlang内容。例如,为了表示城市的温度,我们写下如下代码:
{moscow, {c, -10}}
{cape_town, {f, 70}}
{paris, {f, 28}}
元组有固定的内部的组成数量。我们称在元组中的东西为元素。所以元组{moscow,{c,-10}},元素1为moscow,元素2为{c,-10}。这里的c表示摄氏度,f为华氏度。


留下一个回复

你的email不会被公开。