Ruby: undefined method `>'
-
21-08-2019 - |
Pergunta
Eu só comecei a aprender Ruby e eu corri para um problema hoje.
numResults = /\d+/.match(ie.div(:id, 'results_label').text)
puts "Results found: "+numResults.to_s
while(numResults > 0)
.
. some more code
.
Eu recebo este erro na minha saída:
Exception: undefined method `>' for #<MatchData:0x424c6d4>
O que é realmente estranho, porque eu fiz um loop while no IRB e funcionou muito bem. Eu não posso obter o código dentro do loop para executar porque as varas do programa no estado.
Alguém sabe o que está errado?
Solução
numResults
é um objecto MatchData
e não pode ser comparado com o método >
. Você precisa convertê-lo em uma corda, em seguida, converter a string para um número:
while(numResults.to_s.to_i > 0)
Outras dicas
Nos casos em que a string não corresponder à expressão, numResults
será nil
por isso, se é isso que você está testando, você vai querer
while( !numResults.nil? ){
}
Nos casos em que a cadeia faz corresponder à expressão, numResults
não será nil
e, além disso, irá conter o número de partidas (apenas 1 a mais aqui porque você não tem uma repetição combinar) em numResults.size
Além disso, outros cartazes precisa ter em mente que numResults
não contém nenhum número de registro de jogos, mas contém o valor do real jogo a partir dos dados de texto.
Enquanto
numResults.to_s.to_i
Pode trabalhar, é só devido à graça de nil.to_s.to_i == 0
.
Se você estava contando com numResults
ser algo significativo em termos de contagem de jogo regex, você estava procurando no lugar errado.
Tente alterar a sua condição enquanto a:
while(numResults.to_i > 0)
Isto irá forçar os numResults para um inteiro. Parece que ele está sendo devolvido como uma string de você RegExp correspondência.