gpt4 book ai didi

ruby-on-rails - 在 Ruby 中改变调用对象

转载 作者:数据小太阳 更新时间:2023-10-29 08:43:55 26 4
gpt4 key购买 nike

有人可以解释为什么打印“goodnight”吗?如果你删除了

string = "hello"

它将打印“goodnight world”。

def a_method(string)
string = "hello"
string << " world"
end

bedtime = "goodnight"
a_method(bedtime)

puts bedtime

我知道 << 会发生变异,但不知道为什么添加 = hello 会产生如此大的差异?

最佳答案

在 Ruby 中,就地 操作和返回副本的操作是有区别的。有时名称会提供提示,例如 gsub对比gsub! ,但其他时候你只需要知道,比如 << .

您在这里所做的是重新定义哪个对象 string引用,因此不会对原始引用进行永久修改。

string = "hello"并不代表原来的bedtime对象引用更改。

如果你想要那种效果,你会做 string.replace("hello")这是字符串内容的就地重新分配。

要找出您正在引用的对象,请调用 object_id在所讨论的对象上。您会在这里注意到,随着您的代码,该值发生变化,但随着 replace 的变化。它没有。

Ruby 方法参数通过对象引用 传递,这在实践中很像一个指针。如果您期望通过绝对引用传递该值,则情况并非如此。

关于ruby-on-rails - 在 Ruby 中改变调用对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37978082/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com