7

我刚开始学习 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>

这真的很奇怪,因为我在 IRB 中做了一个 while 循环,它运行良好。我无法让循​​环内的代码执行,因为程序坚持条件。

有谁知道怎么了?

4

3 回答 3

12

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

while(numResults.to_s.to_i > 0)
于 2009-03-24T22:08:34.027 回答
6

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

所以如果这就是你要测试的,你会想要

while( !numResults.nil? ){ 

}

如果字符串确实与表达式匹配,numResults则将不nil包含匹配的数量(这里最多只有 1 个,因为您没有重复匹配)numResults.size

此外,其他张贴者需要记住,numResults不包含找到的匹配数,但包含来自文本数据的实际匹配值。

尽管

numResults.to_s.to_i 

可能会起作用,这只是由于nil.to_s.to_i == 0.

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

于 2009-03-24T22:14:43.607 回答
-1

尝试将您的 while 条件更改为:

while(numResults.to_i > 0)

这将强制 numResults 为整数。看起来它是作为字符串从您的正则表达式匹配器返回的。

于 2009-03-24T22:04:18.637 回答