我的代码看起来像这样
class MyController
def my_action
#params hash gets passed here
...
logger.debug "PARAMS >> #{params.inspect}" #first inspect
@a = MyModule::MyClass.new(params).my_func #some operations done with the argument
logger.debug "PARAMS >> #{params.inspect}" #second inspect
end
end
我的问题是,“第二次检查”中的参数哈希与“第一次检查”中的参数不同。当在类的初始化程序中传递params散列时,会添加一些更多的键值对,当我在params上执行'second inspect'时,我也会在其中找到相同的键值对!这怎么可能?我甚至尝试传递一个包含action的params hash的单独变量,但是徒劳无功!
首先检查:{"action"=>"report", "controller"=>"member/monitoring", "offset"=>"0"}
第二次检查:{"new_key1"=>"new_val1", "action"=>"report", "controller"=>"member/monitoring","new_key2"=>"new_val2", "new_key3"=>"new_val3", "offset"=>"0"}
new_key *被添加到类中,但它们也会出现在action的params哈希中。
答案 0 :(得分:1)
作为参数传递给方法的值是在Ruby中引用,而不是通过值引用。因此,它们可以是descructive,可以改变你的哈希值。您可以使用params.dup
作为new
方法的参数轻松解决此问题。
修改:正如mu指出的那样,实际让new
方法本身执行dup
更合适,而不是在传递params
之前重复。