Ruby反思问题

Gra*_*ith 4 ruby class

我是Ruby的新手,如果问题不一致,请原谅我.我可以像Ruby中的数组一样迭代类成员吗?我该如何实现这一目标?

fan*_*uka 7

您可以创建一个类变量(数组),并在构造函数(initialize)中将新实例推入其中.

class Foo
  @@instances = []

  attr_accessor :name

  def initialize name
    @name = name
    @@instances << self
  end

  def self.instances
    @@instances
  end

end

Foo.new("test")
Foo.new("test2")

Foo.instances.each do |i|
  puts i.name
end
Run Code Online (Sandbox Code Playgroud)


Chu*_*ose 6

我认为OP可能一直在询问您是否可以访问私有,类和实例变量.

在irb或某些程序中试试这个:

p YourClass.methods.sort

在那里你应该看到一堆以_methods或_variables结尾的方法.每个方法都有各种方法,因此您可以轻松地执行以下操作:

YourClass.instance_variables.each do |x|
  p x
end
Run Code Online (Sandbox Code Playgroud)


Chu*_*bas 6

你对班级成员究竟是什么意思?

如果你的意思是实例变量,你可以得到通道instance.instance_variables.如果是类变量,则类似于klass.class_variables.

如果你想得到所有的变量和方法,你另外调用instance.methods(它实际上返回字符串,并且由于别名方法等而变得棘手)