2012-03-17 15 views
0

私はRubyの初心者で、大文字入力を検出する簡単なプログラムを作成しようとしています。私は現在、ruby-1.9.3-p125を使用しています。だから、私はこのコンパイルしようとしています:未定義メソッド `upcase 'for nil:NilClass(NoMethodError) - Ruby 1.9.3

# 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やなめらかを含める必要がありますか? BTW、 "UpCase" .casecase "はうまくいきます。

答えて

2

whileループは、何かが割り当てられる前にreqを参照します。

条件をwhile (req = gets.chomp) != req.upcaseに設定することはできますが、これは条件を複雑にし、引き続き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!" 
+0

これは私のために働いてくれてありがとう!しかし、 "req = gets中"の行では、このvarの特別な定義なしで、 "req"でのリフレクションはまだあります。大丈夫ですか?おそらくwhileループで使う前にこのvarを定義するべきでしょうか? – f1nn

+0

@IlyaRusanen ruby​​は変数を定義する必要はありません。それは彼らに初めて見えるようにします。 – dbenhur

関連する問題