nil的未定义方法`upcase':NilClass(NoMethodError) - Ruby 1.9.3

时间:2012-03-17 04:19:20

标签: ruby

我是ruby的初学者,试图编写一个简单的程序来检测大写输入。我现在使用ruby-1.9.3-p125。所以,我正在努力编译这个:

# coding: utf-8
puts 'hello! enter something:'
while req!=req.upcase
    req=gets.chomp
    if req == req.upcase
        puts "This is UpperCase!"
    else
        puts "Not UpperCase :( Try again!"
    end
end
puts "GoodBye!"

我收到了这样的错误:

app1.rb:4:in `<main>': undefined method `upcase' for nil:NilClass (NoMethodError)

也许我应该包含这样的lib或smth? BTW,“UpCase”.upcase`运作良好。

1 个答案:

答案 0 :(得分:2)

你的while循环引用req,然后分配任何内容。

您可以在while条件while (req = gets.chomp) != req.upcase中设置ref,但这会使条件变得复杂,并且仍然无法处理文件结束条件,其中gets返回nil。更好的方法是将条件集中在文件末尾,并使用break在特殊测试中终止循环:

puts 'hello! enter something:'
while req = gets
    req.chomp!
    if req == req.upcase
        puts "This is UpperCase!"
        break
    else
        puts "Not UpperCase :( Try again!"
    end
end
puts "GoodBye!"