现在的tut2程序并不具备一个很好的编程代码的风格。考虑下面的代码:
tut2:convert(3, inch).
意味着3的单位是inches英尺?还是3是厘米,但是我们打算转换为英尺?所以Erlang有一个方式让这些东西组织为一种更容易理解的形式。我们称为元组,元组的含义为被“{”和“}”包围着的那部分。
我们可以写{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}. Compile and test: 14> c(tut3). {ok,tut3} 15> tut3:convert_length({inch, 5}). {centimeter,12.7000} 16> tut3:convert_length(tut3:convert_length({inch, 5})). {inch,5.00000}
注意上面的第16行,我们将5英尺转换为了厘米度量,并将其安全的转换了回去,得到了原来的值。另外这个例子还说明我们可以将一个函数的返回值作为另一个函数的参数传入。我们先在第16行这里停一下,考虑一下具体的执行情况。我们传入了{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为华氏度。