Module M
Class C
end
end
我需要的是这样的:
M.was_defined_here?(M::C)
M.classes.include?(M::C)
这是否以某种方式存在?
我知道我可以解析 M::C.name。但是有些人可能会想到更改 Module#name,以使其更加简洁或其他。我想要一个干净的解决方案。
最佳答案
M.constants.map {|c| M.const_get(c)}.include?(M::C)
或者,根据 johannes 的评论,使用 find(如果该类确实存在于 M 中并且恰好不是 M 中的最后一个常量,则性能会更好——尽管它很少会产生可测量的差异):
M.constants.find {|c| M.const_get(c) == M::C }
编辑:因为你实际上只是想要一个 bool 结果,这个 any?
比 find
发送更多:
M.constants.any? {|c| M.const_get(c) == M::C }
关于ruby - 可以告诉 ruby 我是否在给定模块中定义了给定类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1445943/