ruby语言函数传入的参数全部都是引用类型吗?
[b]问题补充:[/b]
如果都是引用类型的话,传入函数的参数在函数体内可以被修改,会产生很多副作用吧?需要在函数体内对参数进行拷贝构造,避免副作用吗?
[b]问题补充:[/b]
做了个实验,对each迭代器里传入的局部变量x修改,影响了外部实参,实参的object_id也发生了改变
irb(main):043:0> a=[1,2,3]
=> [1, 2, 3]
irb(main):044:0> b=[3,4,5]
=> [3, 4, 5]
irb(main):045:0> c=[a,b]
=> [[1, 2, 3], [3, 4, 5]]
irb(main):046:0> c.each do |x|
irb(main):047:1* puts x.object_id
irb(main):048:1> x[0]="change"
irb(main):049:1> puts x.object_id
irb(main):050:1> end
114150490
114150490
114145900
114145900
=> [["change", 2, 3], ["change", 4, 5]]
irb(main):051:0> c
=> [["change", 2, 3], ["change", 4, 5]]