2016-01-11 118 views
6

String#match當匹配成功Regexp#match返回MatchData爲什麼`Symbol#match`的行爲與`String#match`和`Regexp#match`不同?

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

Symbol#match返回匹配位置(如String#=~):

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

爲什麼Symbol#match行爲不同?有用例嗎?

+0

很奇怪的決定確實... – ndn

+0

很好的問題。至少在「符號#匹配」的文檔中提到:_Returns sym.to_s =〜obj_。所以這是目的。 – knut

+1

不知何故相關:http://stackoverflow.com/questions/4884242/why-does-ruby-not-symbol-regex-match-operator – knut

回答

1

我將它報告爲Ruby核心中的錯誤:https://bugs.ruby-lang.org/issues/11991。讓我們看看他們會說什麼。


更新 的質疑行爲似乎是一個錯誤。看起來從Ruby 2.4開始,Symbol#match將在匹配成功時返回MatchData實例。