2009-03-24 22 views
7

Tôi mới bắt đầu học Ruby và tôi gặp phải vấn đề ngày hôm nay.Ruby: undefined method `> '

numResults = /\d+/.match(ie.div(:id, 'results_label').text) 
puts "Results found: "+numResults.to_s 

while(numResults > 0) 
. 
. some more code 
. 

tôi nhận được lỗi này trong đầu ra của tôi:

Exception: undefined method `>' for #<MatchData:0x424c6d4> 

Mà thực sự là kỳ lạ bởi vì tôi đã thực hiện một vòng lặp while trong IRB và nó làm việc tốt. Tôi không thể nhận được mã bên trong vòng lặp để thực thi vì chương trình này đang ở điều kiện.

Bất cứ ai biết điều gì là sai?

Trả lời

12

numResults là đối tượng MatchData và không thể so sánh với phương pháp >. Bạn cần phải chuyển đổi nó thành một chuỗi, sau đó chuyển đổi chuỗi thành một số:

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

Hãy thử thay đổi điều kiện trong khi của bạn để:

while(numResults.to_i > 0) 

Điều này sẽ buộc các numResults đến một số nguyên. Có vẻ như nó đang được trả lại như một chuỗi từ bạn regexp matcher.

+1

Mọi người bỏ phiếu này không nhận thức được thực tế là 'MatchData.to_i' không thực sự tồn tại. 'nil.to_i' tồn tại, nhưng không phải' MatchData.to_i' –

+0

Hoạt động trong 1.9.3 và 2.0.0. Vì vậy, nó hợp lệ bây giờ. – Hauleth

6

Trong trường hợp chuỗi không phù hợp với biểu hiện, numResults sẽ nil

vì vậy nếu thats những gì bạn đang thử nghiệm cho, bạn sẽ muốn

while(!numResults.nil?){ 

} 

Trong trường hợp chuỗi không phù hợp với biểu hiện, numResults sẽ không nil, và thêm vào đó, sẽ chứa số lượng kết quả phù hợp (chỉ có 1 kết quả phù hợp nhất ở đây vì bạn không có kết quả trùng lặp lặp lại) trong numResults.size

Ngoài ra, các áp phích khác cần lưu ý rằng numResults không chứa số kết quả được tìm thấy, nhưng chứa giá trị của thực tế khớp với dữ liệu văn bản.

Trong khi

numResults.to_s.to_i 

Có thể làm việc, nó chỉ do ân sủng của nil.to_s.to_i == 0.

Nếu bạn đang dựa vào numResults là bất kỳ điều gì có ý nghĩa về số lượng đối sánh regex, bạn đang tìm kiếm địa điểm sai.

+0

Cảm ơn Kent, câu trả lời của bạn cũng rất hữu ích. – Dennis

Các vấn đề liên quan