Ruby: неопределенный метод `> ' - PullRequest
7 голосов
/ 25 марта 2009

Я только начал изучать Ruby и столкнулся с проблемой сегодня.

numResults = /\d+/.match(ie.div(:id, 'results_label').text)
puts "Results found: "+numResults.to_s

while(numResults > 0)
.
. some more code
.

Я получаю эту ошибку в своем выводе:

Exception: undefined method `>' for #<MatchData:0x424c6d4>

Что действительно странно, потому что я сделал цикл while в IRB, и он работал нормально. Я не могу получить код внутри цикла для выполнения, потому что программа придерживается условия.

Кто-нибудь знает, что не так?

Ответы [ 3 ]

12 голосов
/ 25 марта 2009

numResults является объектом MatchData и не может сравниваться с методом >. Вам необходимо преобразовать его в строку, а затем преобразовать строку в число:

while(numResults.to_s.to_i > 0)
6 голосов
/ 25 марта 2009

В тех случаях, когда строка не соответствует выражению, numResults будет nil

так что если это то, что вы тестируете, вы захотите

while( !numResults.nil? ){ 

}

В случаях, когда строка соответствует совпадению с выражением, numResults не будет nil и, кроме того, будет содержать количество совпадений (только 1, самое большее, потому что вы этого не делаете есть повторяющееся совпадение) в numResults.size

Кроме того, другие авторы должны помнить, что numResults не содержит числа найденных совпадений, но содержит значение фактического совпадения из текстовых данных.

Пока

numResults.to_s.to_i 

Мог бы сработать, только благодаря милости nil.to_s.to_i == 0.

Если вы полагались на numResults как на что-то значимое с точки зрения количества совпадений с регулярным выражением, вы искали не в том месте.

0 голосов
/ 25 марта 2009

Попробуйте изменить условие while на:

while(numResults.to_i > 0)

Это заставит numResults в целое число. Похоже, что он возвращается в виде строки из вашего сопоставителя регулярных выражений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...