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

numResultsMatchDataオブジェクトであり、メソッドと比較することはできません>。それを文字列に変換してから、文字列を数値に変換する必要があります。

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 に答える