如何通过内省判断方法是读写,只读还是只写?

时间:2011-05-11 15:28:51

标签: ruby introspection

我来自Java,想知道我是否可以使用内省为对象“设置”实例变量。

例如,如果我有以下类声明,使用两个实例变量first_attributesecond_attribute

class SomeClass  
  attr_accessor :first_attribute
  attr_reader :second_attribute

  def initialize()  
    # ...
  end
end

我希望能够获得实例方法,可能是通过调用SomeClass.instance_methods并知道哪些实例方法是读/写而不是只读。

在Java中,我可以通过以下方式实现:

PropertyDescriptor[] properties = PropertyUtils.GetPropertyDescriptors(SomeClass);
for (prop : properties) {
  if (prop.getWriteMethod() != null) {
    //  I can set this one!
  }
}

我如何在Ruby中执行此操作?

1 个答案:

答案 0 :(得分:4)

没有像Java属性那样的内置内容,但你可以很容易地做到这一点:

self.class.instance_methods.grep(/\w=$/)

将返回类中所有setter方法的名称。