【问题标题】: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