假设我有两个模块:
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
现在,我想有条件地将这些模块混合到一个类中。这是我尝试过的:
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
这是我看到的行为:
obj = MyClass.new(0)
obj.a #=> nil
也是类@a
内nil
的实例方法。我觉得我在这里没有理解重要的东西。我想了解为什么我正在做的事情不起作用,以及实现我想要的功能的正确方法是什么。