ruby 内联 while vs while 结束

Nev*_*ves 5 ruby inline while-loop

为什么这样做:

a = [1, 2, 3]
while n = a.shift
  puts n
end
Run Code Online (Sandbox Code Playgroud)

虽然这没有:

a = [1, 2, 3]
puts n while n = a.shift
Run Code Online (Sandbox Code Playgroud)

它只有在我n提前初始化时才有效:

a = [1, 2, 3]
n = nil
puts n while n = a.shift
Run Code Online (Sandbox Code Playgroud)

Ale*_*kin 4

也就是说,一般来说,解释器问题不会出现在具有局部变量冒泡的语言中,例如 javascript。

\n\n

解释器(从左到右阅读)n在提及右手操作数之前先遇到它。

\n\n

我想得越多,我就越确信这是 ruby​​ 解释器中的一个错误。正如@Cary 指出的,控制流程实际上是相同的:

\n\n
a = [2, 3]\nn = 1\nputs n while n = a.shift\n#\xe2\x87\x92 2\n#\xe2\x87\x92\xc2\xa03\n
Run Code Online (Sandbox Code Playgroud)\n\n

1上面的输出中没有任何痕迹。

\n