Question

Je viens de commencer à apprendre Ruby et je suis tombé sur un problème aujourd'hui.

numResults = /\d+/.match(ie.div(:id, 'results_label').text)
puts "Results found: "+numResults.to_s

while(numResults > 0)
.
. some more code
.

Je reçois cette erreur dans ma sortie:

Exception: undefined method `>' for #<MatchData:0x424c6d4>

Ce qui est vraiment étrange parce que je fait une boucle while en CISR et il a bien fonctionné. Je ne peux pas obtenir le code dans la boucle pour exécuter parce que le programme colle à la condition.

Quelqu'un sait ce qui ne va pas?

Était-ce utile?

La solution

numResults est un objet MatchData et ne peut pas être comparée à la méthode >. Vous devez le convertir en une chaîne, puis convertir la chaîne en nombre:

while(numResults.to_s.to_i > 0)

Autres conseils

Dans les cas où la chaîne ne correspond pas à l'expression, sera numResults nil

donc si c'est ce que vous testez, vous voulez

while( !numResults.nil? ){ 

}

Dans les cas où la chaîne Finalité correspondent à l'expression, ne sera pas numResults.size nil.to_s.to_i == 0, et en outre, contiendra au plus ici le nombre de matches (seulement 1 parce que vous n » t ont une correspondance répétée) en <=>

En outre, d'autres affiches doivent garder à l'esprit que ne contient pas de nombre <=> de correspondances trouvées, mais contient la valeur du réelle correspondance à partir des données de texte.

Alors que

numResults.to_s.to_i 

pourrait fonctionner, sa seule raison de la grâce de <=>.

Si vous comptiez sur être quelque chose <=> significatif en termes de nombre de match de regex, que vous cherchiez au mauvais endroit.

Essayez de changer votre état while à:

while(numResults.to_i > 0)

Cela forcera les numResults à un nombre entier. On dirait qu'il est retourné comme une chaîne de vous regexp matcher.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top