【问题标题】:Ruby get methods defined in codebase代码库中定义的 Ruby 获取方法
【发布时间】:2018-01-17 16:39:03
【问题描述】:

我正在尝试获取在我们的 Rails 代码库中定义的方法的列表,不包括在超类中定义或在运行时动态定义的任何内容。我试过instance_methods(false),但是返回了很多方法:

> User.instance_methods(false).length
=> 310

我猜这是因为 Rails 在运行时定义了一堆方法。有没有办法获取仅在我们应用程序的文件中定义的方法列表?希望有一种 Ruby 方式,而不仅仅是在所有文件上运行 grep。类方法也有加分...

【问题讨论】:

  • 如果继承自 ActiveRecord::Base,你可以试试User.methods.sort - ActiveRecord::Base.methods
  • 问题是ActiveRecord根据数据库属性在其子类中生成了很多方法:(User.instance_methods(false) - ActiveRecord::Base.instance_methods(false)).size # => 310

标签: ruby-on-rails ruby


【解决方案1】:

User.instance_methods 也会显示所有继承的方法,所以你应该运行类似的东西

User.instance_methods - User.superclass.instance_methods

请注意,当您继承 ActiveRecord::Base 类时,它会显示由 AR 生成的大量其他方法

【讨论】:

【解决方案2】:

使用MyClass.instance_methods(false),但如果您不希望它返回超类中定义的方法,请确保将false 作为参数传递。

此外,将MyClass.singleton_methods(false) 用于类方法。

更多信息:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 2013-04-07
    相关资源
    最近更新 更多