отладка ruby, попытка перебрать переменные экземпляра объекта - PullRequest
2 голосов
/ 22 февраля 2011

Мне любопытно, будет ли возможность циклически перебирать переменные экземпляра объекта и выводить некоторую базовую отладочную информацию.

Я знаю, что вы можете получить список переменных экземпляра, выполнив object.instance_variables, который возвращает массив символизированных переменных, таких как [:@var1, :@var2, :@etc] Моё первое предположение о том, как это сделать, было:

obj.instance_variables.each do
  obj.instance_variable_get(var).to_yaml
end

но я получаю следующую ошибку: "не могу сбросить анонимный класс Class". Какой может быть лучший подход?

Ответы [ 2 ]

5 голосов
/ 22 февраля 2011

Проблема в том, что в вашем экземпляре переменных есть анонимный процесс или функция, которая не отвечает to_yaml.Поскольку это не может быть преобразовано в yaml, вы получаете эту ошибку.Вместо этого попробуйте использовать inspect, все объекты должны ответить на inspect:

obj.instance_variables.each do |var|
  p obj.instance_variable_get(var).inspect
end
0 голосов
/ 22 февраля 2011

Вы должны принять во внимание, что в ruby ​​простое объявление attr_accessor не создаст переменную, вам нужно присвоить ее:

class A
  attr_accessor :x, :y

  def initialize(z)
    @x=z
  end

end

def inspect_object(o)
    o.instance_variables.each do |var|
        var.slice!(0)
        p var
        p o.send(var)
    end

end

a = A.new(5)
inspect_object(a)

Это выводит

"x"
5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...