未定义的方法“upcase';对于nil:NilClass(nomethoderor)-Ruby 1.9.3

未定义的方法“upcase';对于nil:NilClass(nomethoderor)-Ruby 1.9.3,ruby,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 :

我是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)
app1.rb:4:in`:nil:NilClass(NoMethodError)的未定义方法“upcase”

也许我应该包括像这样的lib或smth?顺便说一句,“UpCase”。UpCase`工作正常。

您的while循环在分配任何内容之前引用了req

您可以在while条件
while(req=gets.chomp)!=req.upcase
,但这使条件变得复杂,并且仍然无法处理GET返回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!"

好吧,这对我很有效,谢谢!但在“while req=get”行中,我们仍然引用“req”,没有对该变量进行特殊定义。可以吗?也许我们应该在使用while循环之前定义这个变量?@IlyaRusanen-ruby不需要定义变量。它第一次看到它们就让它们变大了。