我基本上是一名Java开发者。我在Ruby上工作了大约一年时间。与Java不同,Ruby是一种纯面向对象的编程语言。这里出现了一个疑问。它是按值传递还是按引用传递?Java按值传递工作:“当传递原始类型时,我看到值被复制并传递给方法。但是在对象的情况下,引用被复制并传递给方法。引用包含堆中对象的位置。在方法调用期间,只传递对象的位置。因此不会创建重复的对象。同一个对象被修改。”
但是当我尝试下面的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内部的a---10
aa-----5
meth2内部的数组---34
arr---34