Chciałbym rozszerzyć obiekt Ruby o moduł, ale chcę móc zmienić moduł, który ma być używany w czasie wykonywania, i mieć możliwość zmiany tego obiektu. Innymi słowy, chciałbym przekazać nazwę modułu do extend
jako parametr. Jak mogę to zrobić?Jak mogę rozszerzyć obiekt w Ruby o moduł, którego nazwa jest podana w parametrze?
Próbowałem następujące:
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
(Zakładając, że metoda get_module_name_from_config_file
zwraca String
z nazwą żądanego modułu - tutaj albo "M1"
lub "M2"
.)
Ale mam to:
error: wrong argument type String (expected Module).
ponieważ m
jest typu String
, a nie Module
, oczywiście. Próbowałem go z m
również jest symbolem, ale mam ten sam problem (zastąp String
z Symbol
w komunikacie o błędzie).
Czy mogę przekonwertować m
na coś typu Module
? Czy jest inny sposób, w jaki mogę to osiągnąć?
Z góry dziękuję.
Czy coś takiego działa z const_get? http://stackoverflow.com/questions/2361347/how-to-convert-a-string-to-a-stant-in-ruby – jstim