2016-01-11 7 views
6

String#match und Regexp#match eine MatchData zurück, wenn Spiel gelingt:Warum verhält sich `Symbol # match` anders als` String # match` und `Regexp # match`?

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

Aber Symbol#match gibt die Übereinstimmungsposition (wie String#=~):

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

Warum Symbol#match anders verhalten? Gibt es einen Anwendungsfall?

+0

Sehr seltsame Entscheidung in der Tat ... – ndn

+0

Schöne Frage. Zumindest wird es in der Dokumentation für 'Symbol # match' erwähnt: _Returns sym.to_s = ~ obj_. So ist es Zweck. – knut

+1

Irgendwie verwandt: http://stackoverflow.com/questions/4884242/why-does-ruby-not-symbol-regex-match-operator – knut

Antwort

1

Ich habe es als ein Fehler in Ruby-Core gemeldet: https://bugs.ruby-lang.org/issues/11991. Mal sehen, was sie sagen werden.


aktualisieren Die in Frage Verhalten scheint ein Fehler gewesen zu sein. Es scheint, dass von Ruby 2.4 Symbol#match eine MatchData Instanz zurückgibt, wenn eine Übereinstimmung erfolgreich ist.