Tag: 传值

为什么这个Ruby方法通过引用传递它的参数

我回答了这个问题并偶然发现了一些奇怪的事情。 Ruby通过值传递参数,但变量本身就是引用。 那么为什么第一种方法似乎通过引用传递它的参数呢? require ‘set’ require ‘benchmark’ def add_item1!(item, list) list << item unless list.include?(item) end def add_item2(item, list) list |= [item] end def add_item3(item, list) set = Set.new(list) set << item list = set.to_a end array1 = [3,2,1,4] add_item1!(5, array1) p array1 # [3, 2, 1, 4, 5] array2 = [3,2,1,4] add_item2(5, array2) p […]

Ruby是按值传递还是按引用传递?

我基本上是一个java开发人员。 我在ruby工作了大约一年。 与java不同,Ruby是一种纯粹的面向对象编程语言。 这是一个疑问。 它是按值传递还是按引用传递? Java作为pass-by-value工作:“当传递基元时,我看到值被复制并传递给方法。但是如果有对象,则引用被复制并传递给方法。引用包含对象的位置在堆中。在方法调用期间,只传递对象的位置。因此不会创建重复的对象。修改相同的对象。“ 但是当我尝试下面的ruby代码片段时,我得到的结果与我在Java中得到的结果相同:“在方法调用期间,数字就像一个原语(比如在java中),而数组就像java中一样完美引用”。 现在,我很困惑。 如果ruby中的所有内容都是对象,那么在方法调用期间为什么数字对象会重复? class A def meth1(a) a = a+5 puts “a inside meth1—#{a}” end def meth2(array) array.pop puts “array inside meth2—#{array}” end end obj1 = A.new aa=5 obj1.meth1(aa) puts “aa—–#{aa}” arr = [3,4,5] obj1.meth2(arr) puts “arr—#{arr}” 结果: 一个内部meth1 — 10 AA —– 5 数组里面的meth2 — 34 ARR — […]