Ruby on rails 参数散列在传递到模块';s级

Ruby on rails 参数散列在传递到模块';s级,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我的代码看起来像这样 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

我的代码看起来像这样

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执行“第二次检查”时,我也会在其中找到相同的键值对!这怎么可能?我甚至尝试传递一个单独的变量,其中包含操作的params散列,但没有成功

首先检查:
{“操作”=>“报告”、“控制器”=>“成员/监控”、“偏移量”=>“0”}

第二次检查:
{“new\u key1”=>“new\u val1”,“action”=>“report”,“controller”=>“member/monitoring”,“new\u key2”=>“new\u val2”,“new\u key3”=>“new\u val3”,“offset”=>“0”}


新的_键*被添加到类中,但它们也出现在操作的params散列中。

作为参数传递给方法的值在Ruby中是通过引用传递的,而不是通过值传递的。因此,它们可以是描述性的,并且可以更改您的散列。通过使用
params.dup
作为
new
方法的参数,可以很容易地解决这个问题


编辑:正如mu所指出的,实际上让
new
方法本身执行
dup
,而不是在通过
params

之前进行复制更为合适,可以添加
第一次检查
第二次检查
的输出。这将有助于理解。或者至少是区别。另外,如果某些内容确实发生了更改,那么应该在
MyModule::MyClass
行中。。。那么,也谈谈这方面的情况。它实际上在做什么?如果由MyModule::MyClass执行复制,效果会更好。