通常情况下,我可能会通过如下方式获取 Ruby 对象的特定实例的元类:
class C
def metaclass
class << self; self; end
end
end
# This is this instance's metaclass.
C.new.metaclass => #<Class:#<C:0x01234567>>
# Successive invocations will have different metaclasses,
# since they're different instances.
C.new.metaclass => #<Class:#<C:0x01233...>>
C.new.metaclass => #<Class:#<C:0x01232...>>
C.new.metaclass => #<Class:#<C:0x01231...>>
假设我只想知道任意类的任意对象实例 obj
的元类,我不想定义 元类
(或类似的) obj
类的方法。
有办法吗?
最佳答案
正式名称是singleton_class
.获取它的方法(在 Ruby 1.9.2 中)很简单:
obj.singleton_class
对于旧的 Ruby 版本,您可以使用 backports
:
require 'backports/1.9.2/kernel/singleton_class'
obj.singleton_class
# or without using backports:
class << obj; self; end
关于ruby - 给定一个 Ruby 对象的实例,我如何获得它的元类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2945830/