我来自Java,想知道我是否可以使用内省为对象“设置”实例变量。
例如,如果我有以下类声明,使用两个实例变量first_attribute
和second_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中执行此操作?
答案 0 :(得分:4)
没有像Java属性那样的内置内容,但你可以很容易地做到这一点:
self.class.instance_methods.grep(/\w=$/)
将返回类中所有setter方法的名称。