且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

最快/单行方式在Ruby中列出attr_accessors?

更新时间:2022-12-27 19:52:20

无法(单行或其他方式)列出attr_accessor定义的所有方法,并且仅列出attr_accessor定义的方法而不定义自己的attr_accessor.

There is no way (one-liner or otherwise) to list all methods defined by attr_accessor and only methods defined by attr_accessor without defining your own attr_accessor.

这是一个覆盖MyBaseClass中的attr_accessor的解决方案,以记住使用attr_accessor创建了哪些方法:

Here's a solution that overrides attr_accessor in MyBaseClass to remember which methods have been created using attr_accessor:

class MyBaseClass
  def self.attr_accessor(*vars)
    @attributes ||= []
    @attributes.concat vars
    super(*vars)
  end

  def self.attributes
    @attributes
  end

  def attributes
    self.class.attributes
  end
end

class SubClass < MyBaseClass
  attr_accessor :id, :title, :body
end

SubClass.new.attributes.inspect #=> [:id, :title, :body]