2010-08-23 4 views
2
def next_prime_number (last_known_prime) 
    while true 
    last_known_prime++ 

    found_factor = false # ERROR 
    for i in 1...last_known_prime 
     if last_known_prime % i == 0 
     found_factor = true 
     break 
     end 
    end 
    if !found_factor 
     puts "new prime: #{last_known_prime}" 
     Kernel.exit 
    end 
    end 
end 

in `next_prime_number': undefined method `[email protected]' for false:FalseClass (NoMethodError) 

위의 오류가 발생하여 완전히 엉망입니다. 어떤 아이디어 (아니,이 숙제가 아니라, 나는 오일러 프로젝트를 통해 루비를 가르치려고 노력하고있다).거짓에 대해 정의되지 않은 메소드 '+ @': FalseClass (NoMethodError) ruby ​​

답변

4

mikej가 말한 것처럼 루비에는 후행 증가 (++) 연산자가 없습니다. (그것을 정의 할 때 [email protected] 철자) 단항 플러스

last_known_prime++ 

found_factor = false 

이 당신의 비밀 오류의 원인이되는

last_known_prime + (+(found_factor = false)) 

--------------------^ unary plus on false 

같은 것을로 분석지고, 그러나있다.

3

루비에서 정수를 증가시키기위한 연산자가 ++이므로 last_known_prime++last_known_prime = last_known_prime + 1으로 바꾸어보십시오.

표시되는 오류가 수정됩니다. 그 후에 프로그램에 또 다른 문제가 있지만 오일러 문제를 직접 풀려고하지 않습니다.

+0

또는 last_known_prime + = 1 또는 last_known_prime = last_known_prime.succ –

+0

고마워요. @Logan, 나는 .succ와 같은 방법이 있지만 내 머리 꼭대기에서 그 이름을 기억할 수 없다는 느낌이 들었습니다. – mikej