当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何列出类的所有方法(不是扩展和包含的方法)》经验,为你挑选了1个好方法。

使用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控制台中运行它时,@ Waker Maker的答案是正确的.不过,我仍然有一个问题,特别是我,包括ActionView::Helpers::UrlHelperMyClass.我总是得到额外的方法: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)

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



1> Wand Maker..:

您可以执行以下操作:

MyClass.instance_methods(false)
#=> [:foo, :bar]

如果要包含任何定义的类方法MyClass,可以执行以下操作:

MyClass.instance_methods(false) + MyClass.singleton_methods(false)

这是定义所有类/模块的工作示例

class BaseClass
  def moo
  end
end

module AnotherBaseClass
  def boo
  end
end

module MyModule
  def roo
  end
end

class MyClass < BaseClass
  extend AnotherBaseClass
  include MyModule

  def self.goo
  end

  def foo
  end

  def bar
  end
end

p MyClass.instance_methods(false) + MyClass.singleton_methods(false)
#=> [:foo, :bar, :goo]

p RUBY_VERSION
#=> "2.2.2"

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有