2011-02-03 27 views
7

Rubí hace automáticamente símbolos no stringify al realizar un partido de expresiones regulares en ellos, que es fácil de hacer cuando se tiene las variables que contienen símbolos y se olvida de que es necesario llamar a #to_s en ellos antes de intentar un partido de expresiones regulares:¿Por qué Ruby no Symbol # = ~ (operador de concordancia regex)?

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

resulta que: = ~ se define en el objeto, la clase primordial de Ruby 1.8:

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

por supuesto, la aplicación sólo devuelve falso, dejando a las subclases como cuerdas y Regexp a proporcionar implementaciones significativas.

¿Por qué Symbol no proporciona algo como lo siguiente?

def =~(pattern) 
    self.to_s =~ pattern 
end 

¿Alguno de los lingüistas de Ruby sabe?

+0

He escrito una buena cantidad de código Ruby, y no tener Alguna vez me encontré con el problema, así que no puedo decir que sea tan fácil de hacer. –

Respuesta

9

No sé la razón por la que se decidió que debería 1.8 comportarse de esta manera, pero 1,9 cambiado en ese sentido:

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

Esperaba que fuera cierto. :) –