gpt4 book ai didi

ruby - 在 Rails 中,为什么我的 Controller 参数被类修改

转载 作者:太空宇宙 更新时间:2023-11-03 17:31:18 24 4
gpt4 key购买 nike

我有一个类似于此的 Controller 操作:

def reports
puts params
@stats = Client.stats(params)
puts params
end

初始参数可能如下所示:

{ end: '2012-01-01 21:00:19' }

在我的客户端模型中,我有这个:

def self.stats(opts)
opts[:start] = (Time.now - 30.days).to_i
...do some calculations..
return stats
end

如果我检查函数运行前后发送的 params 对象,我可以看到它已被 self.stats 方法修改。

在上面的示例中,我没有在初始参数中发送“开始”,该方法将其添加用于计算 - 正如预期的那样。

没想到函数会修改原来的哈希值!

谁能解释为什么会这样?

--编辑--

我忘了说我试图创建参数的副本并使用它,同样的问题。

def reports
a = params
@stats = Client.stats(a)
puts params
end

参数还在更新?!

最佳答案

那是因为您的函数调用获取的是对参数的引用而不是副本。如果您执行类似 opts[:start] = (Time.now - 30.days).to_i 的操作,您正在编辑参数对象。

a = params:现在两个变量都指向内存中的同一个位置。您只复制了指针。

Google 搜索 ruby object copyruby deep copy 或在 stackoverflow 上搜索。第一次尝试时,您可以尝试 params.clone

关于ruby - 在 Rails 中,为什么我的 Controller 参数被类修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36008252/

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