我写了一个简单的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}}
答案 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
。那就是宣言的力量!学习阅读错误消息。一切顺利!