有人可以解释为什么这会打印"晚安"?如果你删除了
string = "hello"
它将打印"晚安世界"
def a_method(string)
string = "hello"
string << " world"
end
bedtime = "goodnight"
a_method(bedtime)
puts bedtime
我明白&lt;&lt;变异,但不是为什么添加= hello会产生如此大的差异?
答案 0 :(得分:3)
在Ruby中,就地操作与返回副本的操作之间存在差异。有时,该名称会提供一个提示,例如gsub
vs gsub!
,但有时您需要知道,例如<<
。
您在此处所做的是重新定义哪些对象string
引用,因此不会对原始引用进行永久修改。
行string = "hello"
并不意味着原始bedtime
对象引用发生了变化。
如果你想要这样的效果,你可以string.replace("hello")
进行字符串内容的就地重新分配。
要找出您所引用的对象,请在相关对象上引用object_id
。您在此处会注意到,您的代码值会发生变化,但replace
却没有。
Ruby方法参数由对象引用传递,实际上它很像指针。如果您希望通过绝对引用传递该值,则不是这种情况。