Я в основном разработчик Java. Я работаю в рубине около года. В отличие от java, Ruby - это чисто объектно-ориентированный язык программирования. Здесь возникает сомнение. Является ли это передачей по значению или передачей по ссылке? Java работает как pass-by-value: «При передаче примитивов я вижу, что значение дублируется и передается методу.Но incase of Objects, ссылка дублируется и передается методу. Ссылка содержит местоположение объекта в куче. Во время вызова метода передается только местоположение объекта, поэтому не создается повторяющихся объектов. Один и тот же объект модифицируется ».Является ли Ruby pass-by-value или pass-by-reference?
Но когда я попробовал фрагмент кода ниже, я получил те же результаты, что и на 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
аа ----- 5
массив внутри meth2 --- 34
обр --- 34
дублировать [здесь] (http://stackoverflow.com/ q/22827566/995714) и [здесь] (http://stackoverflow.com/q/1872110/995714) –