2011-02-03 10 views
7

Ruby symboli nie robi automatycznie stringify podczas wykonywania mecz regex na nich, które jest łatwe do zrobienia, gdy masz zmienne zawierające symbole i zapomnieć, że trzeba do nich zadzwonić na #to_s przed próbą regex meczu:Dlaczego Ruby nie jest symbolem nr = = ~ (operator dopasowania do wyrażenia regularnego)?

>> :this =~ /./ 
=> false 
>> :this =~ :this 
=> false 
>> :this =~ /:this/ 
=> false 

okazuje się, że: = ~ jest zdefiniowana w obiekcie, Ruby 1.8 jest pierwotna klasa:

http://rubybrain.com/api/ruby-1.8.7/doc/index.html?a=M000308&name==~

oczywiście, realizacja prostu zwraca false, pozostawiając go do podklasy jak ciąg i wyrażenia regularnego zapewnić sensowne wdrożenia.

Dlaczego więc Symbol nie zapewnia czegoś takiego?

Dowolni lingwiści z Rubinów wiedzą?

+0

Pisałem dobrą ilość kodu Ruby, i nie mieć kiedykolwiek natknąłem się na problem, więc nie mogę powiedzieć, że jest to łatwe. –

Odpowiedz

9

Nie wiem, dlaczego zdecydowano, że 1,8 powinien zachowywać się w ten sposób, ale 1,9 zmieniło w tym względzie:

>> RUBY_VERSION #=> "1.9.2" 
>> :this =~ /./ #=> 0 
>> :this =~ /is/ #=> 2 
+0

Miałem nadzieję, że to będzie prawda. :) –

Powiązane problemy