Ruby: 未定义方法 `>'

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循环,并且它运行得很好。但是,由于程序停留在条件处,我无法执行循环内的代码。

有人知道问题出在哪里吗?

3个回答

12

numResults是一个MatchData对象,无法使用>方法进行比较。您需要将其转换为字符串,然后再将字符串转换为数字:

while(numResults.to_s.to_i > 0)

6

如果字符串与表达式不匹配,numResults将为nil

因此,如果这是您要测试的内容,您需要

while( !numResults.nil? ){ 

}

在字符串与表达式匹配的情况下,numResults 不会是 nil ,并且还将包含匹配项的数量(因为这里没有重复匹配,所以最多只有 1 个)在 numResults.size 中。
此外,其他发布者需要注意,numResults 不包含找到的匹配项数,而是包含来自文本数据的实际匹配值。
同时,
numResults.to_s.to_i 

这可能有效,只是因为nil.to_s.to_i == 0的恩典。

如果你指望numResults在正则表达式匹配计数方面有任何实际意义,那么你就错了。


谢谢Kent,你的回答也非常有帮助。 - Dennis

-1

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

while(numResults.to_i > 0)

这将把 numResults 强制转换为整数。看起来它从你的 regexp 匹配器中返回的是字符串。

1
投票支持这个观点的人并不知道事实上 MatchData.to_i 并不存在。nil.to_i 存在,但 MatchData.to_i 却不存在。 - Kent Fredric
适用于1.9.3和2.0.0版本。因此现在是有效的。 - Hauleth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接