Rubí:método indefinido `>'
-
21-08-2019 - |
Pregunta
Recién comencé a aprender Ruby y hoy me encontré con un problema.
numResults = /\d+/.match(ie.div(:id, 'results_label').text)
puts "Results found: "+numResults.to_s
while(numResults > 0)
.
. some more code
.
Recibo este error en mi salida:
Exception: undefined method `>' for #<MatchData:0x424c6d4>
Lo cual es realmente extraño porque hice un bucle while en IRB y funcionó bien.No puedo ejecutar el código dentro del bucle porque el programa se apega a la condición.
¿Alguien sabe qué pasa?
Solución
numResults
es un MatchData
objeto y no se puede comparar con el >
método.Debe convertirlo en una cadena y luego convertir la cadena en un número:
while(numResults.to_s.to_i > 0)
Otros consejos
En los casos en que la cadena no coincide con la expresión, numResults
será nil
así que si eso es lo que está tratando de detectar, querrá
while( !numResults.nil? ){
}
En los casos en que la cadena hace que coincida con la expresión, numResults.size
no será nil.to_s.to_i == 0
, y, además, contendrá el número de partidos (sólo 1 como máximo aquí porque usted don' t tiene un partido de repetición) en <=>
Además, otros carteles tienen que tener en cuenta que <=> contiene ningún número de coincidencias encontradas, pero contiene el valor de la real partido de los datos de texto.
Mientras
numResults.to_s.to_i
podría funcionar, su único debido a la gracia de <=>.
Si nos fiamos de <=> ser algo significativo en términos de número de coincidencia de expresiones regulares, que buscando en el lugar equivocado.
Trate de cambiar su condición, mientras que a:
while(numResults.to_i > 0)
Esto obligará a los numResults a un entero. Parece que se está volviendo como una cadena de usted coincidencias de expresión regular.