5
我在轨道控制器操作下面的代码序列。按照预期,在IF之前,PARAMS包含请求参数。之后,参数是零。任何人都可以请解释这里发生了什么?在rails中分配/替换参数哈希
if false
params = {:user => {:name => "user", :comment => 'comment'}}
end
谢谢。
我在轨道控制器操作下面的代码序列。按照预期,在IF之前,PARAMS包含请求参数。之后,参数是零。任何人都可以请解释这里发生了什么?在rails中分配/替换参数哈希
if false
params = {:user => {:name => "user", :comment => 'comment'}}
end
谢谢。
包含请求参数的params
实际上是一个方法调用,它返回一个包含参数的散列。您的params =
行将分配给一个名为params
的本地变量。
的if false
块之后,红宝石已经看到了当地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
但是如果有一个分配给这不是在代码执行路径,然后红宝石变量已创建局部变量,但其值为nil
。
irb(main):007:0> baz = "Example" if false
=> nil
irb(main):008:0> baz
=> nil
“Ruby已经看到了本地参数”真的,Ruby?真!!!??? O_o(对不起,但是这花了我几天的时间......看到没有执行,是吗?) – steffen 2017-04-12 11:25:25