请帮助我获得一个类中声明的所有实例变量,就像instance_methods显示一个类中所有可用的方法一样.

class A
  attr_accessor :ab, :ac
end

puts A.instance_methods  #gives ab and ac

puts A.something         #gives me @ab @ac...

推荐答案

你可以使用instance_variables:

A.instance_variables

但这可能不是您想要的,因为这会得到classA中的实例变量,而不是该类的实例.所以你可能想要:

a = A.new
a.instance_variables

但是请注意,仅仅调用attr_accessor并没有定义任何实例变量(它只是定义了方法),所以在显式设置它们之前,实例中不会有任何变量.

a = A.new
a.instance_variables #=> []
a.ab = 'foo'
a.instance_variables #=> [:@ab]

Ruby相关问答推荐

使用map DO使用嵌套数组重构对象数组

使用 Ruby 仅删除数组中的特定重复项

有没有更好的方法来加入剩余不变的子列表?

碰撞检测测试中对象的 Nil 类

Ruby - 获取正在执行的文件

Ruby:p *1..10中的星号是什么意思

Ruby |= 赋值运算符

Ruby on Rails:你能把 Ruby 代码放在 YAML 配置文件中吗?

Ruby 中的 :+ 和 &:+ 是什么?

如何使用 yardoc 列出未记录的模块/类/常量/方法?

如何找到安装 Ruby Gem 的路径(即 Gem.lib_path c.f. Gem.bin_path)

try 学习/理解 Ruby 的 setter 和 getter 方法

如何仅从 Gemfile 中查看依赖关系树?

group_by 在 rails by 2 或更多属性

为什么在 ruby​​ / rails / activerecord 中并不总是需要 self ?

Jekyll - 找不到命令

为什么 Ruby 的 Date 类会自动加载,但 DateTime 不会?

ruby module_function 与包含模块

Sublime Text 2 控制台输入

获取Ruby中当前目录的父目录