不同语言如何修改 function 传入的参数的值
2017-07-07 23:12
357 查看
问题:不同语言如何修改 function 传入的参数的值
这个问题是 Call by value or Call by reference 的问题c, c++, golang 这类属于传什么由你自己决定,可以传值也可以传指针,都是显式声明的
ruby, python, java 等经典的面向对象语言说是 call by value 的, 但其实这个 value 是 object reference (java 基本类型不是 object 我们忽略这个不影响后面的), 而 object 有两种类型, mutable (如 array) 和 immutable (如 numeric, string, python 的 tuple 等), 传入的参数其实都是 object, 但是能不能修改是语言决定的, 比如说 ruby 中的 array 提供了修改 array 的 object 的方法 push (python 中的 append) 就可以直接操作 object 本体而不是 object reference, 而一般 string, numeric 等类型是没有办法修改本体的
当然,在不需要过多考虑性能的情况下是推荐通过返回值修改变量值的,修改 function 的参数算是 function call 时的副作用,并不直观
references
https://jeffknupp.com/blog/2012/11/13/is-python-callbyvalue-or-callbyreference-neither/http://www.python-course.eu/passing_arguments.php
http://goinbigdata.com/golang-pass-by-pointer-vs-pass-by-value/
https://stackoverflow.com/questions/1249991/variable-references-in-lisp
相关文章推荐
- C语言-----内存与指针(3) How 4000 do you pass a string to a function如何给一个函数传入字符串作为参数:
- python function 传入多个参数; 动态传入不同个数参数
- Java如何在方法中修改传入参数的值
- Java md5加密 控制台传入与web传入参数 结果不匹配 || 相同字符串加密结果不同,如何保证JAVA MD5加密结果在不同的环境下都相同
- Java md5加密 控制台传入与web传入参数 结果不匹配 || 相同字符串加密结果不同,如何保证JAVA MD5加密结果在不同的环境下都相同
- Oracle9i新特点-如何修改Spfile的参数
- 如何修改系统启动时的语言
- 一个类如何实现两个接口中同名同参数不同返回值的函数
- 不同database排序方式,不同语言,如何解决国际化编程问题
- 语言栏成灰色,如何修改?
- MessageBox参数说明及如何修改其按钮文字
- 在实现ReportServer的时候,如何判断当前传入的参数值为null
- a[9]与9[a]的确是相同的,以及函数内部如何得到传入数组参数的大小
- c语言中如何处理变化参数问题
- 【WEBI专题】如何实现like的参数传入?
- 如何在solarwinds同一个页面显示不同设备的不同参数
- 如何向回调函数中传入其他参数
- 不同web如何通讯之 html页面获取传递的参数
- a[9]与9[a]的确是相同的,以及函数内部如何得到传入数组参数的大小
- 如何动态修改ObjectDataSource数据源的查询参数