【问题标题】:Get attr_accessor/instance variables in ruby在 ruby​​ 中获取 attr_accessor/instance 变量
【发布时间】:2012-05-26 02:41:44
【问题描述】:

所以我知道你可以通过调用#instance_variables 来获取Ruby 中的所有实例变量,但是如果它们还没有被设置,那么它们就不会出现。

示例

class Walrus
  attr_accessor :flippers, :tusks
end

w = Walrus.new
w.instance_variables # => []
w.tusks              # => nil
w.instance_variables # => [:@tusks]

我想立即访问 attr_accessor 定义的所有实例变量。

w = Walrus.new
w.instance_variables # => [:@tusks, :@flippers]

【问题讨论】:

标签: ruby attributes instance-variables


【解决方案1】:

嗯,它们还不存在。实例变量在第一次赋值时就出现了。如果您希望它们出现在全新的实例中,请在构造函数中触摸它们。

class Walrus
  attr_accessor :flippers, :tusks

  def initialize
    self.flippers = self.tusks = nil
  end
end

w = Walrus.new
w.instance_variables # => [:@tusks, :@flippers]

【讨论】:

    【解决方案2】:

    好吧,attr_accessor 创建了一对方法,一个 setter 和一个 getter。我不确定是否有获取列表的内置方法,但您可以查看结果对的实例方法:

    Walrus.instance_methods.find_all do |method|
      method != :== &&
      method != :! &&
      Walrus.instance_methods.include?(:"#{method}=")
    end
    

    【讨论】:

      【解决方案3】:

      使用方法减去 Object 或 Class 的方法怎么样?返回的数组将包含您定义的属性/方法,以及在 getter/accessor 中定义的实例变量。

      your_instance_name.methods - Object.methods
      your_instance_name.methods - Class.methods
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-03
        • 1970-01-01
        • 2014-07-29
        • 2010-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多