На основании полезных комментариев от jeremy04
и Jörg W Mittag
я понимаю, что в Ruby нет ничего, что соответствует repr
, и что я не могу использовать простой repr
-подобный метод ввсе экземпляры классов без самоопыления class Object
. Тем не менее, я понимаю, что если я просто сделаю repr
автономной функцией, я смогу получить ту же функциональность, не применяя мартышки-патчи и выполняя repr(obj)
вместо obj.repr
всякий раз, когда мне нужна эта информация для данного объекта. Следующая автономная функция работает ...
def repr(obj)
attrhash = {}
obj.instance_variables.sort.each {
|v|
attrhash[v] = instance_variable_get(v)
}
{
:string => obj.inspect,
:methods => obj.class.instance_methods.sort,
:attributes => attrhash
}
end
У меня есть эта функция, возвращающая хеш вместо строки, чтобы я мог делать такие вещи:
repr(obj)[:attributes]
.
Я всегда могу сделать repr(obj).to_s
, если мне нужна строка.
Кроме того, я могу превратить это в класс. Я оставлю это как упражнение для читателя. :)