Ruby:传递给函数的变量被改变了

时间:2012-05-25 13:00:48

标签: ruby string function

为什么在执行函数后,传递给以下代码中的函数的变量var发生了变化?

def my_func(my_var)
  out_var = my_var
  out_var[3]="STUFF"
  return out_var
end

var = "Testing"
puts my_func(var)
puts var

输出:

TesSTUFFing
TesSTUFFing

为什么“var”已被更改?有人可以向我解释一下吗?

2 个答案:

答案 0 :(得分:8)

在Ruby中,变量通过引用传递。

您必须明确克隆变量:

def my_func(my_var)
  out_var = my_var.clone
  out_var[3]="STUFF"
  out_var
end

答案 1 :(得分:2)

字符串在Ruby中不是不可变的,因此您可以将字符串传递给修改字符串的函数。