请帮助我以同样的方式获取在类中声明的所有实例变量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_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
但是这可能不是你想要的,因为这得到实例变量在类A
,而不是这个类的一个实例。所以,你可能想:
a = A.new
a.instance_variables
但是请注意,只是打电话attr_accessor
没有定义任何实例变量(它只定义的方法),所以不会有任何的情况下,直到将它们明确。
a = A.new
a.instance_variables #=> []
a.ab = 'foo'
a.instance_variables #=> [:@ab]
Ruby中是否有任何方法可以计算未定义的变量。 正如我们在attr_accessor中提供的列表一样。所以他们的入场已经完成了。 谢谢回答 – 2012-08-12 21:26:27
@AkshayVishnoi'attr_accessor:foo'只是产生'def foo; @foo; end'和'def foo =(val); @foo = val; end'。没有任何东西被存储 – 2012-08-12 21:29:24
感谢您的帮助,但我仍然没有找到自己的方式来回答我的问题。 像先生一样,如果我有包含变量名称的类'Player'。现在我已经初始化了5个对象。现在,如果我想找到名称为“Ak”的玩家数量,那么我将如何在模块中动态生成此功能,名为“MyModule”,它包含在“Player”类中 感谢您的合作 – 2012-08-12 21:54:16
如果你想获得的所有实例变量的值,你可以尝试这样的事:
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 }]
我仍然不知道这是什么。第二部分是问,或者它如何与需要得到所有来自对象的实例变量。 – 2012-08-12 22:12:52
实例变量没有在任何地方声明。这个问题没有意义。 – 2012-08-13 01:21:35
“name”变量也是动态创建的。 – 2012-08-13 05:01:14