【问题标题】:Is there a way to find all the methods added to a class dynamically?有没有办法动态查找添加到类中的所有方法?
【发布时间】:2016-01-25 22:05:02
【问题描述】:

当您包含 gem 时,gem 会动态创建许多方法。有没有办法找到通过defdefine_methods [原文如此] 创建的所有方法?

【问题讨论】:

  • 方法就是方法。您总是可以包装 define_methods 并捕获它的调用。
  • 戴夫 我完全不明白你在说什么。我是红宝石的新手。所以这就是问题所在:我正在查看一个 Rails 模型,并且我可以在 model.rb 文件中看到一些方法。除此之外,他们还包括一个工作流 gem,它创建了一堆方法。所以我想看看是否有办法区分它们。

标签: ruby


【解决方案1】:

你可以这样做:

irb(main):002:0> t = Object.methods; nil
=> nil
irb(main):003:0> require 'rails'
=> true
irb(main):004:0> Object.methods - t
=> [:cattr_reader, :cattr_writer, ...,  :silence, :quietly]

# heh, 48 more methods in Object

当然,不需要对 Rails 进行逆向工程。你可以read the docs

【讨论】:

  • 这是我在 Rails 控制台中尝试的 [36] pry(main)> t = Object.methods; nil => nil [37] pry(main)> Object.methods - t => []
  • 好吧,但是当您分配t. 时,您已经包含了rails。表达式的重点是在包含gem 之前和之后查看Object
  • 当然。您可以运行irbruby -e 'p Object.methods' 之类的东西,然后使用您的终端或IDE 将原版Object 符号数组复制(到剪贴板)。然后将其粘贴到 rails 控制台并将 that 分配给 t. 请记住,并非所有的猴子补丁都会施加在 Object 上,有时像 String 这样的类是受害者。跨度>
  • 请注意Object.methods 将返回Object 响应的方法,即Class 中定义的方法,而不是Object 中定义的方法。这可能是也可能不是你想要的。
  • 是的,请参阅stackoverflow.com/questions/4664578/… 了解有关方法发现的讨论。
猜你喜欢
  • 2021-05-24
  • 2018-06-22
  • 1970-01-01
  • 1970-01-01
  • 2021-09-11
  • 1970-01-01
  • 2015-09-02
  • 2017-04-28
  • 1970-01-01
相关资源
最近更新 更多