2009-03-24 18 views
7

मैंने अभी रूबी सीखना शुरू किया और मैं आज एक समस्या में भाग गया।रूबी: अपरिभाषित विधि `> '

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> 

कौन वास्तव में अजीब है, क्योंकि मैं आईआरबी में थोड़ी देर के पाश बना दिया है और यह ठीक काम किया। मैं लूप के अंदर कोड को निष्पादित करने के लिए कोड नहीं प्राप्त कर सकता क्योंकि प्रोग्राम इस स्थिति में चिपक जाता है।

कोई भी जानता है कि क्या गलत है?

while(numResults.to_i > 0) 

यह एक पूर्णांक के लिए numResults बाध्य करेगा:

उत्तर

12

numResults एक MatchData वस्तु है और > विधि के साथ तुलना नहीं की जा सकती है।

while(numResults.to_s.to_i > 0) 
-1

करने के लिए अपने जबकि हालत बदलने का प्रयास करें। ऐसा लगता है कि यह आपके regexp matcher से एक स्ट्रिंग के रूप में वापस किया जा रहा है।

+1

लोग इसे वोट देने वाले तथ्य इस तथ्य से अवगत नहीं हैं कि 'MatchData.to_i' वास्तव में मौजूद नहीं है। 'nil.to_i' मौजूद है, लेकिन 'MatchData.to_i' –

+0

नहीं 1.9.3 और 2.0.0 में काम करता है। तो अब यह मान्य है। – Hauleth

6

ऐसे मामलों में जहां स्ट्रिंग अभिव्यक्ति से मेल नहीं खाता, numResultsnil

thats तुम क्या कर रहे हैं यदि ऐसा है तो

हो जाएगा: आप एक स्ट्रिंग के लिए यह तो कन्वर्ट करने के लिए, एक नंबर करने के स्ट्रिंग परिवर्तित की जरूरत है जांच के लिए आप चाहते हैं

while(!numResults.nil?){ 

} 

मामलों में जहां स्ट्रिंग एक्सप्रेशन से मेल करता है में, numResultsnil नहीं होगा, और इसके अलावा, में शामिल होंगे numResults.size

इसके अलावा में (यहां अधिक से अधिक है क्योंकि आप एक दोहराई मैच की जरूरत नहीं है केवल 1) मैचों की संख्या, अन्य पोस्टर को ध्यान में रखना है कि numResults पाया मैचों में से कोई नंबर शामिल की जरूरत है, लेकिन का मान टेक्स्ट डेटा से वास्तविक मिलान।

numResults.to_s.to_i 

काम कर सकते हैं, अपने ही nil.to_s.to_i == 0 की कृपा से।

यदि आप रेगेक्स मैच गिनती के मामले में numResults पर कुछ भी सार्थक होने के लिए भरोसा कर रहे थे, तो आप गलत जगह पर देख रहे थे।

+0

धन्यवाद केंट, आपका उत्तर भी वास्तव में सहायक था। – Dennis

संबंधित मुद्दे