为什么Ruby在这里抛出NameError



>当我运行下面的代码时:

puts s while (s = gets.chomp) != '42'

露比会扔Undefined local variable or method `s' for main:Object (NameError) .为什么?

Ruby 是从左到右解析的,s在定义之前使用。

我相信局部变量的初始化顺序在 Ruby 1.9 左右发生了变化。您应该重构代码或升级到更新的 Ruby。(请注意,不再维护 1.8。

s 尚未

定义,位于 puts s 语句中。

你正在做的事情基本上等同于:

begin
  puts s                           # s is undefined here
end while (s = gets.chomp) != '42'

将 while 块放在第一位以使其工作:

while (s = gets.chomp) != '42'     # s gets defined here
  puts s
end

如果你真的想做一行,你可以先定义s,但它很丑陋

while (s = gets.chomp) != '42' ; puts s ; end

相关内容

最新更新