2016-01-11 8 views
6

String#matchRegexp#matchマッチが成功した場合MatchDataを返す:`Symbol#match`は` String#match`と `Regexp#match`と異なった動作をするのはなぜですか?

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

をしかし、マッチ位置(のようなString#=~)をSymbol#match返します

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

はなぜ異なっSymbol#match振る舞いをしますか?ユースケースはありますか?

+0

確かに非常に奇妙な決定... – ndn

+0

良い質問。少なくとも、それは 'Symbol#match'のドキュメントに書かれています:_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インスタンスを返します。

関連する問題