2016-01-11 25 views
6

String#match ve maç başarılı olduğunda bir MatchData dönmek Regexp#match:`Symbol # match` niçin` String # match` ve `Regexp # match`'den farklı davranıyor?

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

Ama maç konumunu Symbol#match döndürür (gibi String#=~):

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

Neden Symbol#match farklı davranır yapar? Kullanım çantası var mı?

+0

Gerçekten çok garip bir karar ... – ndn

+0

Güzel soru. En azından, "Symbol # match": _Returns sym.to_s = ~ obj_ belgesinde belirtilmiştir. Yani amaç bu. – knut

+1

Bir şekilde ilgili: http://stackoverflow.com/questions/4884242/why-does-ruby-not-symbol-regex-match-operator – knut

cevap

1

Ruby core: https://bugs.ruby-lang.org/issues/11991 bir hata olarak bildirdim. Bakalım ne diyecekler.


Güncelleme sorgulandığı davranışı bir hata olmuş gibi görünmektedir. Ruby 2.4'ten, Symbol#match'un bir eşleşme başarılı olduğunda MatchData örneğini döndüreceği anlaşılıyor.

İlgili konular