首页 > Erlang并发教程 > 2.4 Erlang并发编程-函数调用中的模式识别
2013
11-04

2.4 Erlang并发编程-函数调用中的模式识别

Erlang函数调用中的模式识别

程序1.4定义了在摄氏、华氏和列式温标间进行温度转换的函数convertconvert的第一个参数是一个包含了温标和要被转换的温度值,第二个参数是目标温标。

程序1.4

-module(temp).
-export([convert/2]).

convert({fahrenheit, Temp}, celsius) ->
    {celsius, 5 * (Temp - 32) / 9};
convert({celsius, Temp}, fahrenheit) ->
    {farenheit, 32 + Temp * 9 / 5};
convert({reaumur, Temp}, celsius) ->
    {celsius, 10 * Temp / 8};
convert({celsius, Temp}, reaumur) ->
    {reaumur, 8 * Temp / 10};
convert({X, _}, Y) ->
    {cannot,convert,X,to,Y}.

convert进行求值时,函数调用中出现的参数(项式)与函数定义中的模式进行匹配。当找到一个匹配时,“->”右侧的代码便被求值,如:

> temp:convert({fahrenheit, 98.6}, celsius).
{celsius,37.0000}
> temp:convert({reaumur, 80}, celsius).
{celsius,100.000}
> temp:convert({reaumur, 80}, fahrenheit).
{cannot,convert,reaumur,to,fahrenheit}

留下一个回复

你的email不会被公开。