考虑到在Ruby编程语言中,所有的东西都被认为是一个对象,我认为将参数传递给方法是通过引用来完成的。然而,下面这个小小的例子让我感到困惑:
$string = "String"
def changer(s)
s = 1
end
changer($string)
puts $string.class
String
=> nil正如您所看到的,原始对象没有被修改,我想知道为什么是,以及我如何才能完成期望的行为,即。获取方法来实际更改其参数所引用的对象.
发布于 2011-10-07 14:23:44
赋值不将值绑定到对象,而是将对象引用绑定到标识符。参数传递的工作方式也是一样的。
当您输入函数的主体时,世界如下所示:
+---+ +----------+
| s |----------------->| "String" |
+---+ +----------+
^
+-------+ |
|$string|--------------------+
+-------+密码
s = 1让世界看起来像
+---+ +---+ +----------+
| s |------>| 1 | | "String" |
+---+ +---+ +----------+
^
+-------+ |
|$string|--------------------+
+-------+赋值语法操纵变量,而不是对象。
与许多类似的语言(Java、C#、Python)一样,ruby是按值传递的,其中的值通常是引用的。
若要操作string对象,可以在字符串上使用方法,例如s.upcase!。这类事情将反映在方法之外,因为它操作对象本身。
https://stackoverflow.com/questions/7688391
复制相似问题