ruby - 如果类方法被覆盖,则访问类
问题描述
这是一个外部类,其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
获取方法作为,将该未绑定的方法绑定到您的实例,然后调用它。例如:class
Object
UnboundMethod
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
),那么所有的赌注都没有了,你将进入一个充满痛苦和困惑的全新世界。
推荐阅读
- python - Dask read_sql_table 抛出错误 AttributeError: 'Connection' object has no attribute '_instantiate_plugins'
- java - 这个简单的线程程序是多线程的吗?
- android - 滚动 TVertScrollBox 时防止触发事件
- .net-core - .net core 2.2 facebook auth store access_token
- bash - Bash - 如何在 bash 脚本中的特定行号之后在 rst 文件中输入行
- yocto - 在任何 yocto 系统中,什么相当于 apt-get 或 yum?
- flutter - 从 Android 迁移到 Flutter 的影响
- php - 没有 (.php) 扩展名的链接
- c# - 在不使用电子邮件的情况下使用基于令牌和基于 cookie 的身份验证
- pdf - 从 pdf 文档中打开超链接时,操作系统内部会发生什么?