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

Pet*_*r-W 2 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
Run Code Online (Sandbox Code Playgroud)

输出:

TesSTUFFing
TesSTUFFing
Run Code Online (Sandbox Code Playgroud)

为什么"var"被改变了?有人可以向我解释一下吗?

Ste*_*fan 8

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

您必须显式克隆变量:

def my_func(my_var)
  out_var = my_var.clone
  out_var[3]="STUFF"
  out_var
end
Run Code Online (Sandbox Code Playgroud)