2009-07-05

Patch en Regexp para poder usarlas como clave en un Hash

Siguiendo mi proyecto de hacer mi wiki en Ruby, encontré un comportamiento muy raro.
Generé un hash (que se llama @rules) que no tiene un elemento que tiene. O sea, @rules[@rules.keys[2]] da nil, pero @rules.values[2] devuelve el objeto asociado a la clave @rules.keys[2]. Como este hash tiene como claves un montón de expresiones regulares, me imaginé que había un problema con el hash y el eql? de Regexp, así que los implementé de nuevo y monkeypatchié.
Este es el código:

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


Esta corrección me anduvo con la siguiente versión de ruby:
$ ruby --version
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]


Espero que les sirva.
Happy hacking,
Aureliano.

2 comentarios:

Alexis Walker dijo...

Aureliano,
Mi nombre es Alexis Walker, tengo una empresa que provee servicios de diseño y programacion. Estoy buscando un programador que tenga muy buenos conocimientos de SQL y que tambien tenga conocimientos de Ruby on Rails para un proyecto nuevo.
El proyecto tiene el potencial de durar mes a mes por varios meses.
Hice una busqueda y encontre tu perfil y queria saber si estarias interesado en conocer mas acerca del proyecto o si conces a alguien que pueda estar interesado.

Muchas gracias,
Alexis Walker
alexis@ikonwire.com

Anónimo dijo...

Hola amor!!