if子句Ruby中的变量声明行为

时间:2013-11-26 18:04:10

标签: ruby

我对以下行为感到有点困惑

if true
  foo = "true"
end

if false
  bar = "false"
end

foo # => "true"
bar # => nil
buzz # => 
# ~> -:11:in `<main>': undefined local variable or method `buzz' for main:Object (NameError)

我希望bar会抛出一个NameError,但事实并非如此,当我和一些朋友玩游戏时我真的碰到了这个,但是没有人可以对这种行为做出明确的解释,这要归功于预期的明确答案

1 个答案:

答案 0 :(得分:1)

在ruby中,在if块内声明的变量与在方法内的顶层声明的变量具有完全相同的范围。由于翻译已经通过bar所见的行,因此很好。