我注意到下面的代码中有一个Ruby局部变量的奇怪行为。似乎Ruby遇到了错误的部分并将params
设置为nil。 irb中的代码如下:
2.1.2 :001 > def params
2.1.2 :002?> {a:1}
2.1.2 :003?> end
2.1.2 :014 > def go1!
2.1.2 :015?> p params
2.1.2 :016?> if false
2.1.2 :017?> params = 1
2.1.2 :018?> end
2.1.2 :019?> p params
2.1.2 :020?> end
=> :go1!
2.1.2 :021 > go1!
{:a=>1}
nil
=> nil
任何人都能解释一下吗?
答案 0 :(得分:3)
Ruby在解析代码时确定局部变量的生命周期,因此即使未达到params = 1
赋值,params
也将被解释为局部变量(并设置为nil
默认情况下)在此范围内。
以下是文档链接:
http://docs.ruby-lang.org/en/2.1.0/syntax/assignment_rdoc.html#label-Local+Variables+and+Methods