gpt4 book ai didi

ruby - 如果类方法被覆盖,则访问类

转载 作者:数据小太阳 更新时间:2023-10-29 07:20:30 26 4
gpt4 key购买 nike

这是一个外部类,它的 class 方法被覆盖了。

class Foo
def class
"fooo"
end
end

class Boo < Foo
end

class Moo < Foo
end

现在我有了一个子类的实例。是否可以找出它属于哪个类?

foo.class # currently returns 'fooo', I want get Boo or Moo.

最佳答案

你可以使用 instance_method从安全的地方(例如 Object)获取 class 方法作为 UnboundMethod ,将该未绑定(bind)的方法绑定(bind)到您的实例,然后调用它。例如:

class_method = Object.instance_method(:class)
# #<UnboundMethod: Object(Kernel)#class>

class_method.bind(Boo.new).call
# Boo

class_method.bind(Moo.new).call
# Moo

class_method.bind(Foo.new).call
# Foo

当然,如果您还替换了 Object#class(或 Kernel#class),那么一切都将结束,您将进入一个全新的世界痛苦和困惑。

关于ruby - 如果类方法被覆盖,则访问类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56782952/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com