2012-03-17 5 views
0

Я действительно начинаю в рубине, пытаясь написать простую программу для обнаружения ввода в верхнем регистре. Теперь я использую ruby-1.9.3-p125. Таким образом, я пытаюсь скомпилировать это:Неопределенный метод `upcase 'для 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) 

Может быть, я должен включать в себя любую библиотеку или чего-л, как это? BTW, «UpCase» .upcase` работает хорошо.

ответ

2

Ваши обратные ссылки на цикл повторяются, прежде чем что-либо назначается ему.

Вы можете установить ref в своем состоянии 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

Ну, это сработало для меня, спасибо! Но в строке «while req = gets» мы по-прежнему отказываемся от «req» без специального определения этого var. Это нормально? Может быть, мы должны определить этот var перед использованием в цикле while? – f1nn

+0

@IlyaRusanen ruby ​​не требует определения переменных. Это делает их в первый раз, когда они их видят. – dbenhur

Смежные вопросы