Есть несколько способов, в зависимости от того, как это определено. Если вы определили его как обычно (как-то def
или define_method
в eval
или class_eval
), то вы можете использовать defined? obj.prop
, чтобы убедиться, что он отвечает читателю (для писателя нет эквивалента). Вы также можете использовать obj.respond_to? :prop
для читателя и obj.respond_to? :prop=
для писателя.
Если вы используете method_missing
для имитации вызова для свойства, то obj.respond_to?
будет работать только в том случае, если вы также изменили это значение (в этом случае вам нужно проверить его отдельно), и единственный способ проверить ваша собственность - пытаться читать из нее и писать в нее, и утверждать, что она не вызывает никаких исключений.