如何知道课程中包含哪些模块

时间:2013-01-14 12:06:40

标签: ruby module metaprogramming

我想找到包含在特定类中的模块,不包括它的祖先。 E.g:

module M; end
module N; end

class A; include M; end
class B < A; include N; end

p B.included_modules

#=> [N, M, Kernel]
# I want only N

我无法使用B.included_modules[0],因为我不知道B包含了多少个模块。

1 个答案:

答案 0 :(得分:3)

如果你知道A是B的超类,那么

p B.included_modules - A.included_modules应该为您提供您正在寻找的内容

p B.included_modules - B.superclass.included_modules

module M; end
module N; end
module O; end

class A; include M; end
class B < A; include N; include O; end

p B.included_modules - A.included_modules
#=> [O, N]