2

为什么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”被改变了?有人可以向我解释一下吗?

4

2 回答 2

8

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

您必须显式克隆变量:

def my_func(my_var)
  out_var = my_var.clone
  out_var[3]="STUFF"
  out_var
end
于 2012-05-25T13:02:37.863 回答
2

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

于 2012-05-25T13:06:43.650 回答