ruby 方法到底是按值传递还是按引用解决方法

ruby 方法到底是按值传递还是按引用
def pref1(agr)  
  agr.downcase!
end

a1 = 'HELLO'
pref1(a1)
puts "#{a1}" #输出 hello

def pref2(agr)
  agr.downcase
end


a2 = 'PREF2'
pref2(a2)
puts "#{a2}" #输出 PREF2

def pref3(a,b)
  a,b = b,a
end

a,b = 1,2
pref3(a,b)
puts a,b #输出 1,2

def pref4(agr)
  agr.replace('aaaaa')
end

a4 = 'a'
pref4(a4)
puts a4 #输出 aaaaa

 

 

 

ruby 函数到底是按值传递还是按引用???

------解决方案--------------------
传递, 因为值的范围只作用方法内。

引用, 是全局变量。
------解决方案--------------------
一般的scalar类型是按值传递的,hash和array是按引用传递,在方法中修改后也会改变原来的内容
myList = %w [ 1 2 3]

def swap(list)
list.reverse!
end

swap(myList)
------解决方案--------------------
downcase downcase!方法不一样。 一切都是对象。自然都是按引用传递的啊。