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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top