2012-03-17 8 views
0

저는 루비에서 대문자 입력을 탐지하는 간단한 프로그램을 작성하려고합니다. 나는 지금 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 조건 인 while (req = gets.chomp) != req.upcase에서 ref를 설정할 수 있지만 이로 인해 조건이 복잡해지고 gets가 nil을 반환하는 파일 조건의 끝을 처리하지 못합니다. 조건을 파일 끝 부분에 집중시키고 특별한 테스트에서 루프를 종료하기 위해 break를 사용하는 것이 더 좋을 것입니다 :

+0

글쎄, 저에게 도움이되었습니다. 감사합니다! 그러나 "req = gets 동안"이 var의 특별한 정의없이 "req"에서 우리는 여전히 refrence를 보았습니다. 괜찮 니? 어쩌면 while 루프에서 사용하기 전에이 var을 정의해야할까요? – f1nn

+0

@IlyaRusanen 루비는 변수를 정의 할 필요가 없습니다. 그것은 그들이 그것을 처음 보게 만듭니다. – dbenhur

관련 문제