0

我的代码看起来像这样

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

我的问题是,“第二次检查”中的参数哈希与“第一次检查”中的不同。当在类的初始化程序中传递参数散列时,会添加更多的键值对,当我对参数进行“第二次检查”时,我也会在其中找到相同的键值对!这怎么可能?我什至尝试传递一个包含操作参数哈希的单独变量,但徒劳无功!

首先检查:{"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* 被添加到类中,但它们也出现在操作的参数散列中。

4

1 回答 1

1

作为参数传递给方法的值在 Ruby 中是通过引用,而不是通过值。因此,它们可能具有破坏性,并且可以更改您的哈希值。您可以通过将params.dup其用作方法的参数来轻松解决此问题new

编辑:正如 mu 所指出的,实际上让new方法本身执行dup,而不是在传递之前复制更合适params

于 2012-08-29T06:19:31.127 回答