2016-01-11 23 views
6

String#matchRegexp#match trả về một MatchData khi trận đấu thành công:Tại sao `Symbol # match` hoạt động khác với` String # match` và `Regexp # match`?

"".match(//) # => #<MatchData ""> 
//.match("") # => #<MatchData ""> 
//.match(:"") # => #<MatchData ""> 

Nhưng Symbol#match trả về vị trí phù hợp (như String#=~):

:"".match(//) # => 0 

Tại sao Symbol#match cư xử khác nhau? Có trường hợp sử dụng không?

+0

Quyết định rất lạ ... – ndn

+0

Câu hỏi hay. Ít nhất nó được đề cập trong tài liệu cho 'Symbol # match': _Returns sym.to_s = ~ obj_. Vì vậy, nó là mục đích. – knut

+1

Bằng cách nào đó liên quan: http://stackoverflow.com/questions/4884242/why-does-ruby-not-symbol-regex-match-operator – knut

Trả lời

1

Tôi đã báo cáo lỗi này là lỗi trong lõi Ruby: https://bugs.ruby-lang.org/issues/11991. Hãy xem họ sẽ nói gì.


Cập nhật Các hành vi nghi ngờ dường như đã được một lỗi. Có vẻ như từ Ruby 2.4, Symbol#match sẽ trả lại phiên bản MatchData khi kết hợp thành công.