Me gustaría extender un objeto Ruby con un módulo, pero quiero poder cambiar qué módulo usar en tiempo de ejecución y tengo la capacidad de variar esto por objeto. En otras palabras, me gustaría pasar el nombre del módulo al extend
como un parámetro. ¿Cómo puedo hacer esto?¿Cómo puedo extender un objeto en ruby con un módulo cuyo nombre se da en un parámetro?
He intentado lo siguiente:
module M1
end
module M2
end
class C
def initialize module_to_use
extend module_to_use
end
end
m = get_module_name_from_config_file
c1 = C.new m
(Suponiendo que el método get_module_name_from_config_file
devuelve un String
con el nombre del módulo deseado - aquí tampoco "M1"
o "M2"
.)
Pero conseguir esto:
error: wrong argument type String (expected Module).
porque m
es de tipo String
, no Module
, obviamente. Lo intenté con m
siendo un símbolo también, pero me sale el mismo problema (reemplace String
con Symbol
en el mensaje de error).
Entonces, ¿puedo convertir m
en algo así como el tipo Module
? ¿O hay otra forma en que puedo lograr esto?
Gracias de antemano.
¿Funciona algo así con const_get? http://stackoverflow.com/questions/2361347/how-to-convert-a-string-to-a-constant-in-ruby – jstim