【问题标题】:Ruby: undefined method `>'Ruby:未定义的方法`>'
【发布时间】:2010-10-15 07:58:00
【问题描述】:

我刚开始学习 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 循环,它运行良好。 我无法让循​​环内的代码执行,因为程序停留在条件上。

有人知道怎么回事吗?

【问题讨论】:

    标签: ruby comparison loops while-loop


    【解决方案1】:

    numResults 是一个MatchData 对象,不能与&gt; 方法进行比较。你需要先把它转成字符串,然后再把字符串转成数字:

    while(numResults.to_s.to_i > 0)
    

    【讨论】:

      【解决方案2】:

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

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

      while( !numResults.nil? ){ 
      
      }
      

      如果字符串 does 匹配表达式,numResults 不会是 nil,此外,将包含匹配的数量(这里最多只有 1 个,因为你不' numResults.size 中没有重复匹配)

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

      虽然

      numResults.to_s.to_i 
      

      可能会奏效,这要归功于nil.to_s.to_i == 0 的恩典。

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

      【讨论】:

      • 感谢 Kent,您的回答也很有帮助。
      【解决方案3】:

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

      while(numResults.to_i > 0)
      

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

      【讨论】:

      • 投票的人并不知道MatchData.to_i 实际上并不存在。 nil.to_i 存在,但不存在 MatchData.to_i
      • 适用于 1.9.3 和 2.0.0。所以现在有效。
      猜你喜欢
      • 2019-12-25
      • 1970-01-01
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      • 2015-10-11
      • 2016-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多