Giả sử tôi có hai mô-đun:của Ruby mô-đun năng động 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
Bây giờ, tôi muốn có điều kiện trộn các phân hệ vào một lớp. Đây là những gì tôi đã cố gắng:
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
Đây là hành vi tôi nhìn thấy:
obj = MyClass.new(0)
obj.a #=> nil
Cũng @a
là nil
trong các phương pháp dụ trong lớp. Tôi cảm thấy rằng tôi không hiểu điều gì đó quan trọng ở đây. Tôi muốn hiểu lý do tại sao những gì tôi đang làm không hoạt động và cách thức chính xác để đạt được chức năng mong muốn của tôi là gì.
Tuyệt vời, đây chính xác là những gì tôi đang tìm kiếm. Cảm ơn! –