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

Responder a