Załóżmy, że mam dwa moduły:Ruby moduł dynamiczny mix-in
module Test1
attr_accessor :a, :b
@a = 0.0
@b = 0.0
end
module Test2
attr_accessor :c, :d
@c = 0.0
@d = 0.0
end
Teraz chcę warunkowo mieszać tych modułów do klasy. To co próbowałem:
require './Test1.rb'
require './Test2.rb'
class MyClass
def initialize(mode)
if mode == 0
(class << self; include Test1; end)
elsif mode == 1
(class << self; include Test2; end)
else
class << self
include Test1
include Test2
end
end
end
end
To zachowanie widzę:
obj = MyClass.new(0)
obj.a #=> nil
także @a
jest nil
w metodach instancji w obrębie klasy. Czuję, że nie rozumiem tutaj czegoś ważnego. Chciałbym zrozumieć, dlaczego to, co robię, nie działa, a także, jaki jest właściwy sposób osiągnięcia pożądanej funkcjonalności.
Doskonały, dokładnie tego właśnie szukałem. Dzięki! –