我有一个模块TFS SOLUTION
和该模块中的许多类。我想像第一个类一样向DelayTasks
中的所有类都包含另一个模块DelayedEmails
,但只有一个include。有办法吗?
DelayedTasks
答案 0 :(得分:2)
看来您应该能够做到:
module DelayedTasks
class Base
include DelayedEmails
end
class A < Base
end
class B < Base
end
class C < Base
end
class D < Base
end
end
顺便说一句,在一个文件中定义多个类似乎不是一个好习惯(IMO)。当然可以。但是,您可能最终会在这些类的定义位置四处寻找,而如果它们在单独的文件中,则它们的定义位置可能会更加明显。
答案 1 :(得分:-1)
module DelayedTasks
class A
end
class B
end
class C
end
class D
end
end
DelayedTasks.constants.each do |constant|
constant.include DelayedEmails if constant.is_a? Class
end
但是,因为上面的文件被逐行调用,所以如果还有一个文件在DelayedTasks
模块内添加了更多的类,并且该文件在上面的代码之后被加载,则这些类将赢得上面的.each
循环未将其考虑在内,因此它们不会与include
一起获得DelayedEmails
假设首先要问这个问题是为了避免在您所有的类中都包含多个模块...
module DelayedTasks
module Dependencies
def self.included(base)
base.include DelayedEmails
# base.include SomeOtherModule1
# base.include SomeOtherModule2
# ...
end
end
class A
include Dependencies
end
class B
include Dependencies
end
class C
include Dependencies
end
end