如何列出类的所有方法(不是扩展和包含的方法)

时间:2015-12-18 14:14:48

标签: ruby-on-rails ruby ruby-on-rails-3.2 ruby-2.2

使用Ruby 2.2.1,如何列出仅在过滤掉includeextend方法的类/文件中定义的类的所有方法(最好是字符串数组)。我想区分类和实例方法。

目前,我可以使用MyClass.methods(false)获取所有未经授权的方法,但这仍然包含属于include模块的方法。

明确地说,我有:

class MyClass < BaseClass
  extend AnotherBaseClass
  include MyModule

  def foo
  end

  def bar
  end
end

我想得到:

somecodethatreturnssomething
#=> ['foo', 'bar']
# Not including BaseClass, AnotherBaseClass, and ModuleClass methods

更新

当我在一个单独的irb控制台中运行它时,@ Wand Maker的答案是正确的。但是,我仍然有一个问题,即我在ActionView::Helpers::UrlHelper中包含MyClass。我总是得到额外的方法:default_url_options?default_url_options=default_url_options。我认为无论Rails与否都包含相同的行为,所以我没有用Rails标记这个问题。

我甚至在byebug文件的末尾添加了MyClass,以便我可以检查该类并运行MyClass.singleton_methods(false)或运行MyClass.instance_methods(false)。但他们仍然包括这三种不需要的方法。

我可以手动从数组中删除这三个额外的方法,所以我可以获得我班级的动态方法列表,但我担心将来如果有更新或者我的应用程序会中断会在课堂上添加新方法(不知不觉)。

更新

3种方法只在Rails 3中添加(我正在研究的项目),但不在Rails 4中(因为我和@Wand Maker已经测试过)。

这是确切的代码(我已经删除了所有内容,但仍然得到相同的结果/问题)

# lib/my_class.rb
class MyClass
  include ActionView::Helpers::UrlHelper

  def welcome
    puts 'Hello Jules!'
  end

  def farewell
    puts 'Goodbye Jules!'
  end
end

byebug

或者我可以删除该文件:my_class.rb(并将整个代码复制并粘贴到rails console

但是,仍然遇到同样的问题。

0 个答案:

没有答案