>当我运行下面的代码时:
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