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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top