我们如何找出我们目前在哪个类中包含模块? (来自rails-background,我们执行has_ *样式模块)
class Foo
has_likes
end
module HasLikes
def self.included(base)
base.extend(ClassMethods)
end
module ClassMethods
def has_likes(options = {})
end
end
module ContentMethods
def self.included(base)
base.extend ClassMethods
end
# ?????
# how do we get Foo here?
end
end
答案 0 :(得分:0)
首先,正如@Jordan在评论中所说,它闻起来像是一个设计缺陷。
辅助,在module HasLikes
def self.included(base)
base.extend(ClassMethods)
end
module ClassMethods
def has_likes(options = {})
end
end
module ContentMethods
def self.included(base)
base.extend ClassMethods
end
end
end
class Foo
include ::HasLikes::ContentMethods
has_likes
end
ObjectSpace.each_object(Class) do |x|
p(x) if x <= ::HasLikes::ContentMethods
end
#⇒ Foo
声明中,这绝对是不可能的,因为在声明之后它总是被包含在中。
一般情况下,之后可以使用ObjectSpace#each_object
:
[7][2]
但请不要在家里或学校那样做。