請幫助我以同樣的方式獲取在類中聲明的所有實例變量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