为什么Ruby会在这里抛出NameError?

时间:2014-12-20 11:36:56

标签: ruby

当我运行以下代码时:

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

Ruby将抛出Undefined local variable or method `s' for main:Object (NameError)。为什么呢?

3 个答案:

答案 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