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

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

时间: 2024-08-10 03:06:00

ErLang在‘形参传递’时可以右向匹配的相关文章

指针形参实参传递时需要注意

指针形参实参传递时需要注意: 主调函数中实参指针传给被调函数的形参指针时,意味着两个指针指向同一块内存单元.这种情况下在被调函数中通过形参指针对内存区进行操作后,极有可能带来两个指针(形参指针和实参指针)指向不一致.这并不只是由malloc函数造成的(否定之前的观点).如果在主调函数中依然需要被调函数完成后的那个形参指针,明智的做法是将形参指针返回给主调函数. 为了远离这种不一致,最好的方法就是一律返回. PS:如果主调函数以后并不需要使用被调函数中的那个形参指针,此时就大可放心的使用指针之间的

中文乱码 encodeURI来解决URL传递时的中文问题

解决中文乱麻问题,页面端发出的数据作两次encodeURI var name="张三"; encodeURI(encodeURI(name)); 后台解码: URLDecoder.decode(name,"UTF-8"); 参考:http://blog.csdn.net/zqd_java/article/details/53608585 -----------------------------------------------------------------

关于 请求参数 传递时 参数字符串里面包含 特殊符号的 解决~

encodeURIComponent 用这个方法就可以了 是在做微信分享接口的时候 遇到的~~ 例子 function flightHandler0() {    url = url + "?url=" + encodeURIComponent(window.location.href) + "&callback=flightHandler";    // 创建script标签,设置其属性   var script = document.createElem

encodeURI来解决URL传递时的中文问题

在AJAX浏览器来进行发送数据时,一般它所默认的都是UTF-8的编码. 使用JQUERY中所提供的方法来做操作 encodeURI function verify() { //解决中文乱麻问题的方法1,页面端发出的数据作一次encodeURI, 服务器段使用进行转移成UTF-8; //解决中文乱麻问题的方法2,页面端发出的数据作两次encodeURI, 这个做的好处在于,不管浏览器用户在页面来设置编码,服务器所采用的编码来做一次URLencode转换成UTF-8. var url = "AJAX

Java开发WebServices传递pojo提示参数不匹配的问题

webservices服务用Java开发的时候,参数为基本数据类型是没有什么问题的. 但是如果是传递pojo,也就是java对象,可能你会遇到参数不匹配的问题. webservices接口暴露出来以后肯定是一个wsdl文件,看到网上很多文章说"webservices传递pojo的时候,提示参数不匹配,很多人解决方式是把接口和pojo放在一起就好用了.这个其实是表象" This XML file does not appear to have any style information

Eclipse移植项目时JDK版本不匹配Project facet Java version 1.7 is not supported

如果原有项目用的为JDK1.7,而自己的是低版本JDK,比如1.6,可 在项目上右键,选择properties,弹出窗口后点击 Project Facets 选择Java修改其默认JDK版本即可.如:

C++ 语法要点

1.              I/O流的常用控制符              dec                         置基数为10              hex                         置基数为16              oct                         置基数为8              setfill(c)                  设填充字符为C              setprecision(n)   

python 多线层协调应用举例

1. threading.Event 机制应用 2. threading.Lock 防止子线层打印出错 3. 再次遇到在python2.7中,中文字符串作为形参传递时出现的问题并解决. # coding:utf-8 from __future__ import unicode_literals import threading import time # " 妈妈做饭,我弟吃,我刷碗 " # 用事件(Event)对象实现进程时间顺序上的调度 # python2.7 字符串作为实参传递时

在Java与C++中对象作为参数传递的不同

问题源于在Java中使用对象作为参数,按照C++的思路进行调试,发现结果与C++中并不相同. 导致该问题的原因是Java与C++对于对象的解释是不相同的. 在C++中对象作为参数采用的是“传值调用”,当实参通过形参传递时,会调用对象(实参)的拷贝构造函数(如果没有显式的定义拷贝构造函数,将自动调用默认拷贝构造函数,它的功能是将实参中的对象原样的拷贝到形参中,这里牵扯到深拷贝和浅拷贝的问题,但不影响对本问题的分析.),函数实际操作的是该对象的拷贝,并不影响原对象. 而在Java中,对象作为参数时,