在正常情况下:
{A,B,C} = {1,2,3}.
但是不可以{1,2,3} = {A,B,C} .
可是数据当作参数传递时,却可以右向匹配,如:
print({name,Name}=NameTup,{age,Age}) ->和
print(NameTup={name,Name},{age,Age}) ->
这两种方法都可以将NameTup匹配到第一个参数上.
修改:换个思路想这个问题,其实所谓的右向匹配,即第一种写法,只是先把参数匹配到NameTup上然后再级联匹配到{name,Name}上。所以说上面的说法是错误的。
特别地,像如果参数是Record时:
-record(person,{name={‘Lastname‘,‘Firstname‘},age,sex}).
printHW2(#person{name = {_,Name},age = Age} = SomeOne) ->
匹配record内的元素时,还必须右向匹配。不知道是不是语法上的BUG。。。
同样的,这里的思路可以理解成,参数先匹配到SomeOne上,然后再级联到一个匿名{_,Name}和Age上,接下来就是new一个record的操作。所以说这样的写法对的,而我之前的想法是错误的。
ErLang在‘形参传递’时可以右向匹配,布布扣,bubuko.com
原文地址:http://www.cnblogs.com/xiao-L/p/3809755.html