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在执行if块后获得值nil
,而预期结果为 undefined local variable or method b for main:Object
,Ruby是否事先将所有变量初始化为内存中的nil
? / p>
以下代码的相同案例
if nil
bb = 10
end
p bb # nil
有人请说明ruby如何初始化变量以及在这种情况下发生了什么,谢谢
答案 0 :(得分:5)
“[局部变量]如果出现在赋值表达式的左侧(等号(U + 003D)之前),则初始化,即使表达式实际上没有执行。后一种变量具有价值零。“
编辑:这个答案过去常常指向一个相当不错的Ruby引用,它显然被恶意软件站点所取代。我删除了链接,但保留了答案的引用。