ruby - 可以告诉 ruby​​ 我是否在给定模块中定义了给定类

标签 ruby reflection class module

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/

相关文章:

ruby - 不匹配两个下划线的正则表达式

Java 反射 - 找不到 Android 类

java - 使用maven编译ParameterizedType时如何解决这个警告

c++ - 带结构的模板

c++ - 引用模板类中声明的结构

ruby-on-rails - Ruby on Rails : Paperclip with multi-step-form

ruby-on-rails - 在 Rails 中接收电子邮件的最佳实践

java - 将 "any"类类型传递到 java 方法中

ruby - 如何根据第一个或最后一个嵌入文档中的字段值提取 Mongoid 文档?

c# - 如何测试变量是否属于 C# 中的变量类型?