6
p b #undefined local variable or method b for main:Object
a = nil
if a and (b=3)
  do_something_with b
end
p b # nil

为什么 bnil在执行 if 块后获取值,而预期结果是 undefined local variable or method b for main:Object,Ruby 是否nil事先将所有变量初始化到内存中?

与以下代码相同的情况

if nil
  bb = 10
end
p bb # nil

有人请说明 ruby​​ 如何初始化变量以及在这种情况下发生了什么,谢谢

4

1 回答 1

6

“[局部变量]如果出现在赋值表达式的左侧(等号 (U+003D) 之前),即使该表达式实际上没有执行,也会初始化。后一种类型的变量的值为 nil。 "

编辑:这个答案曾经指向一个相当好的 Ruby 参考,它显然已被恶意软件站点所取代。我删除了链接,但保留了答案的引用。

于 2013-03-06T06:42:52.170 回答