El 5 de julio de 2009 19:07, Aureliano Calvo<[email protected]> escribió: > Parece que las opciones menos probables a veces son las que pasan. > Monkeypatchié Regexp y arreglé el problema. Este es el patch: > > class Regexp > alias_method :old_rapidito_inspect, :inspect > > def inspect > �...@inspect = old_rapidito_inspect if @inspect.nil? > �...@inspect > end > > def eql?( other ) > false if other.class != Regexp > self.inspect == other.inspect > end > > alias_method :"==", :eql? > > def hash > self.inspect.hash > end > end > > Bueno, > parece que tengo post nuevo en mi blog :D, > Aureliano. >
Que tal?, queria hacerte el siguente comentario sobre tu solucion: no se exactamente cual seria el origen de tu problema, pero la sensacion obvia que da es q el codigo que opera sobre tu hash, altera el estado de tu objeto Regex durante su ejecucion, capaz lo q deberias hacer es ver si en algún momento podes estar modificando a tu clave desde afuera del Hash, de forma tal q el 'eql?', ya no se cumpla. Si miras la documentacion de eql? para Regex, lo q dice es q el str (la expresion), el kdcode, y las options (case.inses, exteded mode, etc) tienen que ser iguales para q se cumplan la igualdad. Luego en la doc de Regexp#options dice: "Note that additional bits may be set in the returned options: these are used internally by the regular expression code. These extra bits are ignored if the options are passed to Regexp::new. " Es decir parece que algun bit dentro de options se modifica colateralmente, cuando utilizas la regex, podrias tratar de detectar eso, por otro lado, ¿probaste agregar la regex, freezeada al Hash?, capaz, ahi funcione, o al menos te salte en q punto la estar modificando. Bueno, ojala q te aporte algo, Saludos. _______________________________________________ Ruby mailing list [email protected] http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
