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