所以我知道你可以通过调用#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]
答案 0 :(得分:15)
嗯,它们还不存在。实例变量在第一次分配时就会存在。如果你想在一个全新的实例中使用它们,那么在构造函数中触摸它们。
class Walrus
attr_accessor :flippers, :tusks
def initialize
self.flippers = self.tusks = nil
end
end
w = Walrus.new
w.instance_variables # => [:@tusks, :@flippers]
答案 1 :(得分:5)
好吧,attr_accessor
创建了一对方法,一个setter和一个getter。我不确定是否有内置的方法来获取列表,但是您可以查看结果对的实例方法:
Walrus.instance_methods.find_all do |method|
method != :== &&
method != :! &&
Walrus.instance_methods.include?(:"#{method}=")
end
答案 2 :(得分:0)
如何使用方法减去Object或Class中的方法?返回的数组将包含您定义的属性/方法,以及在getter / accessor中定义的实例变量。
your_instance_name.methods - Object.methods
your_instance_name.methods - Class.methods