获取在类中声明的所有实例变量

Aks*_*noi 46 ruby

请帮我获取在类中声明的所有实例变量,instance_methods方法同样向我展示了类中可用的所有方法.

class A
  attr_accessor :ab, :ac
end

puts A.instance_methods  #gives ab and ac

puts A.something         #gives me @ab @ac...
Run Code Online (Sandbox Code Playgroud)

And*_*all 65

你可以使用instance_variables:

A.instance_variables
Run Code Online (Sandbox Code Playgroud)

但这可能不是你想要的,因为它获取了类中 的实例变量A,而不是该类的实例.所以你可能想要:

a = A.new
a.instance_variables
Run Code Online (Sandbox Code Playgroud)

但请注意,只是调用attr_accessor没有定义任何实例变量(它只是定义方法),因此在您明确设置它们之前,实例中不会有任何变量.

a = A.new
a.instance_variables #=> []
a.ab = 'foo'
a.instance_variables #=> [:@ab]
Run Code Online (Sandbox Code Playgroud)


Asc*_*hen 10

如果要获取所有实例变量值,可以尝试这样的方法:

class A
  attr_accessor :foo, :bar

  def context
    self.instance_variables.map do |attribute|
      { attribute => self.instance_variable_get(attribute) }
    end
  end
end

a = A.new
a.foo = "foo"
a.bar = 42
a.context #=> [{ :@foo => "foo" }, { :@bar => 42 }]
Run Code Online (Sandbox Code Playgroud)