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) 

Je reçois l'erreur ci-dessus et je suis tout à fait perplexe. Toutes les idées (non, ce n'est pas devoirs, je suis en train de me enseigner Ruby à travers le Projet d'Euler).méthode non définie + @ » pour faux: FalseClass (NoMethodError) rubis

Répondre

4

Comme mikej dit, il n'y a pas d'opérateur de post-incrémentation (++) en rubis. Il y a cependant, un plus unaire (épeautre [email protected] lors de sa définition)

last_known_prime++ 

found_factor = false 

devient analysé comme quelque chose comme

last_known_prime + (+(found_factor = false)) 

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

qui est la cause de votre erreur cryptique.

3

Il n'y a pas d'opérateur ++ pour incrémenter un entier Ruby, alors essayez de remplacer last_known_prime++ avec last_known_prime = last_known_prime + 1.

Cela corrigera l'erreur que vous voyez. Il y a un autre problème avec votre programme après cela, mais je ne vais pas gâcher votre tentative de résoudre le problème d'Euler vous-même.

+0

Ou last_known_prime + = 1 ou last_known_prime = last_known_prime.succ –

+0

Merci @Logan, j'avais le sentiment qu'il y avait une méthode comme '.succ' mais je ne pouvais pas me souvenir de son nom du haut de ma tête. – mikej

Questions connexes