首页 > 代码库 > ErLang在‘形参传递’时可以右向匹配

ErLang在‘形参传递’时可以右向匹配

在正常情况下:

{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的操作。所以说这样的写法对的,而我之前的想法是错误的。