如果行为不同,Ruby if if vs end?

ela*_*ado 16 ruby

为什么这段代码不起作用?

b if b = true
Run Code Online (Sandbox Code Playgroud)

错误: undefined local variable or method `b'

但这样做:

if b = true
    b
end
Run Code Online (Sandbox Code Playgroud)

它们不应该是一样的吗?

Mic*_*ile 16

这个问题问得好.它与Ruby中的变量范围有关.

以下是Matz关于Ruby bug跟踪器帖子:

局部变量范围确定为向下,从左到右.因此,如果是主体,则在if修饰符的条件下首先分配的局部变量在左侧无效.这是一个规范.