红宝石:未定义的方法'>”
-
21-08-2019 - |
题
我刚开始学习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循环和它好工作这是很奇怪的。 我不能得到的代码在循环内执行,因为该程序执着在的条件。
任何人都知道什么是错的?
解决方案
numResults
是MatchData
对象,不能与>
方法进行比较。你需要将其转换为字符串,然后将字符串转换为数字:
while(numResults.to_s.to_i > 0)
其他提示
在其中字符串不表达匹配的情况下,numResults
将nil
因此,如果多数民众赞成你测试,你会想要
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为整数。它看起来像它正在返回从你的字符串正则表达式匹配。
不隶属于 StackOverflow