ruby - 是否有可能获得 Ruby 中的所有特征类?

标签 ruby reflection metaprogramming eigenclass

在 Ruby 中获取所有模块的列表很容易:

ObjectSpace.each_object(Module).to_a

但是,是否有可能获得所有特征类(也称为单例类或元类)的列表?或者特征类是不可见的?

我试过了

str = "foo"
my_metaclass = class << str; self; end
my_metaclass.class == Class # my_metaclass' class is Class
ObjectSpace.each_object(Class).include?(my_metaclass) # false
ObjectSpace.each_object.include?(my_metaclass) # still false
# Just to show each_object works
ObjectSpace.each_object(Class).include?(String) # true

我正在尝试获取特征类,因为我想列出脚本中定义的所有方法。我可以查找模块和类定义的所有实例方法,然后查找模块和类(或所有对象,如果我想消耗 CPU)的单例方法,但这似乎有点老套。

最佳答案

如果您指的是具有单例方法的对象,这应该可行。

eigens = []
ObjectSpace.each_object do |object|
  eigens << object unless object.singleton_methods.empty?
end

如果不是,你能澄清一下吗?我将此讨论用作引用:

http://www.ruby-forum.com/topic/77046

关于ruby - 是否有可能获得 Ruby 中的所有特征类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7816348/

相关文章:

ruby-on-rails - 如何在 ruby​​ 中将小数转换为美元和美分的字符串值?

ruby - 如何输出数组中元素的索引,这些元素也在另一个数组中?

ruby-on-rails - Rails 遍历模型中的记录

.Net 运行时负载引用

c# - C#中通过反射创建匿名对象

c# - 您如何编写其逻辑不受 future 额外枚举影响的代码?

c++ - SFINAE - 用一个参数检测构造函数

ruby-on-rails - Rails curl 语法

java - 当 Enum 的字符串表示和类型在运行时已知时如何获取 Enum?

metaprogramming - Nemerle 宏的中缀格式