ruby - 如何查看 Ruby 中类层次结构中方法的定义和重写位置?

标签 ruby metaprogramming abstract-syntax-tree

有没有办法以编程方式知道某个方法是否已被子类覆盖?像这样工作的东西:

class BaseModel
  def create
    puts "superclass"
  end
end

class SomeModel < BaseModel
  def create
    puts "subclass"
  end
end

puts SomeModel.overridden_instance_methods #=> [:create]

有什么想法吗?

最佳答案

SomeModel.instance_methods(false) & BaseModel.instance_methods

false 使 instance_methods 不包含继承的方法。然后,我们使用集合交集来查找之前在 BaseModel(或 Object)上定义的 SomeModel 上定义的所有方法。

关于ruby - 如何查看 Ruby 中类层次结构中方法的定义和重写位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3488203/

相关文章:

ruby - 使用 Ruby 文件设置内容类型创建的文件?

ruby - 测试环境中 Rails.application.secrets 中缺少 secret_key_base

ruby-on-rails - after_destroy 删除类别

c++ - `struct decay<T, R(A..., ...)>`是什么意思

java - Eclipse JDT IJavaProject 获取根文件

javascript - 将图像传递到 Bootstrap 模式

ocaml - 基本类型驱动的 ppx 重写

c++ - 由具有不同数量参数的其他函数参数化的函数模板

java - 尝试在 Eclipse 外部使用资源/项目时出现工作区关闭错误

python - 逐步跟踪 Python 表达式求值