Ruby: méthode non définie> »
-
21-08-2019 - |
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?
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.