Yo creo que su solución, si bien fue la menos esperada, fue la mas obvia. Tenía problemas porque la key a veces no la encontraba, cuando en realidad estaba ahí, implemento su propio eql? para realmente encontrar la key cuando corresponde, y el mismo código le anda perfecto, o sea que la solución que planteo, si bien era la menos esperada (porque uno podría llegar a pensar que hay un error lógico de uno mismo antes que un comportamiento no esperado de ruby) es la idónea.
-----Original Message----- From: [email protected] [mailto:[email protected]] On Behalf Of Pablo Herrero Sent: Martes, 07 de Julio de 2009 09:28 a.m. To: [email protected]; Grupo Ruby Argentina Subject: Re: [RubyArg] Expresiones regulares como claves en hashes 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 __________ Información de ESET Smart Security, versión de la base de firmas de virus 4221 (20090706) __________ ESET Smart Security ha comprobado este mensaje. http://www.eset.com __________ Información de ESET Smart Security, versión de la base de firmas de virus 4221 (20090706) __________ ESET Smart Security ha comprobado este mensaje. http://www.eset.com _______________________________________________ Ruby mailing list [email protected] http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
