【问题标题】:assign/replace params hash in rails在rails中分配/替换参数哈希
【发布时间】:2009-08-26 16:06:04
【问题描述】:

我在 Rails 控制器操作中有以下代码序列。正如预期的那样,在 IF 之前,params 包含请求参数。之后,params 为零。谁能解释一下这里发生了什么?

if false
    params = {:user => {:name => "user", :comment => 'comment'}}
end

谢谢。

【问题讨论】:

  • 我遇到了类似的问题,代码尝试有条件地分配给这样的参数:params ||= {}

标签: ruby-on-rails ruby


【解决方案1】:

包含请求参数的params实际上是一个方法调用,它返回一个包含参数的哈希值。您的 params = 行正在分配给名为 params 的局部变量。

if false 块之后,Ruby 已经看到了本地params 变量,因此当您稍后在方法中引用params 时,本地变量优先于调用同名方法。但是,由于您的 params = 分配位于 if false 块内,因此永远不会为局部变量分配值,因此局部变量是 nil

如果你试图在分配给它之前引用一个局部变量,你会得到一个 NameError:

irb(main):001:0> baz
NameError: undefined local variable or method `baz' for main:Object
        from (irb):1

但是,如果对不在代码执行路径中的变量进行赋值,那么 Ruby 会创建局部变量,但其值为 nil

irb(main):007:0> baz = "Example" if false
=> nil
irb(main):008:0> baz
=> nil

请参阅:Assignment - Local Variables and Methods in the Ruby docs

【讨论】:

  • "Ruby 已经看到了本地参数" 真的,Ruby ???真的!!!??? O_o(对不起,但这花了我几天的时间……眼见为实,不是吗?)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-14
  • 1970-01-01
  • 2017-08-08
  • 1970-01-01
相关资源
最近更新 更多