Ruby:未定义的方法`>'

Den*_*nis 7 ruby comparison loops while-loop

我刚开始学习Ruby,今天遇到了一个问题.

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

while(numResults > 0)
.
. some more code
.
Run Code Online (Sandbox Code Playgroud)

我的输出中出现此错误:

Exception: undefined method `>' for #<MatchData:0x424c6d4>
Run Code Online (Sandbox Code Playgroud)

这真的很奇怪,因为我在IRB中做了一个while循环,它工作得很好.我不能让循环中的代码执行,因为程序坚持条件.

谁知道什么是错的?

Jer*_*ten 12

numResults是一个MatchData对象,不能与>方法进行比较.您需要将其转换为字符串,然后将字符串转换为数字:

while(numResults.to_s.to_i > 0)
Run Code Online (Sandbox Code Playgroud)


Ken*_*ric 6

在字符串与表达式不匹配的情况下,numResults将是nil

所以如果那就是你要测试的东西,你会想要的

while( !numResults.nil? ){ 

}
Run Code Online (Sandbox Code Playgroud)

在字符串的情况下匹配的表达,numResults也不会nil在,另外,将包含匹配的数目(仅1最多这里,因为你没有一个重复匹配)numResults.size

此外,其他海报需要记住,numResults其中不包含任何匹配项,但包含文本数据中实际匹配的值.

numResults.to_s.to_i 
Run Code Online (Sandbox Code Playgroud)

可能会工作,这只是因为它的优雅nil.to_s.to_i == 0.

如果你依赖于numResults正则表达式匹配计数方面的任何有意义的东西,那么你看错了地方.