当局部变量设置在同一行时未定义

时间:2015-03-25 06:46:14

标签: ruby

我写了一个简单的echo循环,但它给出了未定义的局部变量错误。

> puts line while line = gets
NameError: undefined local variable or method `line' for main:Object

为什么line puts无法看到line = nil

我知道添加> line = nil > puts line while line = gets #==> Works! apple banana apple banana 修复了此错误。但我想知道为什么会这样。

{{1}}

2 个答案:

答案 0 :(得分:4)

您遇到错误,因为Ruby解析器从上到下,从左到右读取,因此它读取puts line,但对此变量一无所知。

如果你像这样重写它,你的代码就会起作用:

while line = gets
  puts line 
end

通过这种方式,解析器将首先看到作业并且不会抱怨。

答案 1 :(得分:0)

当您提供puts "hello"时,您会向口译员提供有关要打印的内容的信息。

当您提供puts line时,解释器会查找对象line。否则您会收到错误:NameError: undefined local variable or method 'line' for main:Object。那就是宣言的力量!学习阅读错误消息。一切顺利!