当我运行以下代码时:
puts s while (s = gets.chomp) != '42'
Ruby将抛出Undefined local variable or method `s' for main:Object (NameError)
。为什么呢?
答案 0 :(得分:4)
Ruby从左到右解析,s
在定义之前使用。
我认为局部变量的初始化顺序在Ruby 1.9的某处发生了变化。您应该重构代码或升级到更新版本的Ruby。 (请注意,不再维护1.8。)
答案 1 :(得分:2)
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
答案 2 :(得分:0)
如果你真的想要制作一行,你可以先得到一个定义,但它很难看
while (s = gets.chomp) != '42' ; puts s ; end