2013-03-06 100 views
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 

为什么B如果块的执行后,所获得的价值nil,而预期的结果将是undefined local variable or method b for main:Object,是否红宝石初始化事先存储所有的变量nil变量中获得初始化为零

同样的情况下,用下面的代码

if nil 
    bb = 10 
end 
p bb # nil 

有人请扔在红宝石如何初始化变量,什么是在这种情况下,要对一些轻,感谢

+3

[为什么Ruby似乎会从case语句中提取变量声明,即使该代码路径未执行?](http://stackoverflow.com/questions/12928050/why-does-ruby-seem - 从一个案件内的声明 - e) – sawa 2013-03-06 06:44:40

回答

4

“[局部变量]是如果它出现在赋值表达式的左边(在等号(U + 003D)之前),即使表达式没有真正执行,它也会被初始化,后一类变量的值为nil。

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

+1

链接不再工作。 – 2014-04-05 19:17:05

+0

链接指向潜在的恶意软件站点。 – 2014-12-23 20:10:08

+0

看起来你是对的。我已经删除了这个链接,以免任何人误操作。 – 2014-12-24 19:39:07