我刚开始学习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循环和它好工作这是很奇怪的。 我不能得到的代码在循环内执行,因为该程序执着在的条件。

任何人都知道什么是错的?

有帮助吗?

解决方案

numResultsMatchData对象,不能与>方法进行比较。你需要将其转换为字符串,然后将字符串转换为数字:

while(numResults.to_s.to_i > 0)

其他提示

在其中字符串不表达匹配的情况下,numResultsnil

因此,如果多数民众赞成你测试,你会想要

while( !numResults.nil? ){ 

}

在其中字符串确实匹配表达式,numResults不会nil,并且另外,将仅含有1匹配的数量(至多这里,因为你不具有重复的情况下做匹配)在numResults.size

此外,其他海报要记住,numResults不包含数找到的匹配,但包含的实际的从文本数据匹配的值。

虽然

numResults.to_s.to_i 

可能的工作,其只由于nil.to_s.to_i == 0的宽限期。

如果你是依靠numResults是什么在正则表达式匹配数目而言有意义的,你正在寻找在错误的地方。

试着改变你的,而条件:

while(numResults.to_i > 0)

这将迫使numResults为整数。它看起来像它正在返回从你的字符串正则表达式匹配。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top