Как я могу определить, является ли метод интроспекцией для чтения-записи, только для чтения или только для записи? - PullRequest
2 голосов
/ 11 мая 2011

Я пришел из 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?

1 Ответ

4 голосов
/ 11 мая 2011

В действительности нет ничего встроенного, например, свойства Java, но вы можете сделать это довольно легко, например:

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

Который будет возвращать имена всех методов установки в классе.

...