Ruby中奇怪的局部变量行为

时间:2014-12-23 10:31:51

标签: ruby

我注意到下面的代码中有一个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

任何人都能解释一下吗?

1 个答案:

答案 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