2016-01-11 14 views
6

String#match e Regexp#match restituire una MatchData quando riesce partita:Perché `Simbolo # corrisponde? Si comportano diversamente da` String # match` e `Regexp # match`?

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

Ma Symbol#match restituisce la posizione partita (come String#=~):

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

Perché Symbol#match comportarsi in modo diverso? C'è un caso d'uso?

+0

Decisamente una decisione davvero strana ... – ndn

+0

Bella domanda. Almeno è menzionato nella documentazione per 'Symbol # match': _Returns sym.to_s = ~ obj_. Quindi è uno scopo. – knut

+1

In qualche modo correlato: http://stackoverflow.com/questions/4884242/why-does-ruby-not-symbol-regex-match-operator – knut

risposta

1

L'ho segnalato come errore nel core di Ruby: https://bugs.ruby-lang.org/issues/11991. Vediamo cosa diranno.


Aggiornamento Il comportamento messo in discussione sembra essere stato un errore. Sembra che da Ruby 2.4, Symbol#match restituisca un'istanza MatchData quando una corrispondenza ha esito positivo.

Problemi correlati