变量用nil初始化

Mud*_*Ali 6 ruby

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如何初始化变量以及在这种情况下发生了什么,谢谢

Tim*_*tan 5

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

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