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

Responder a