Как получить название объекта в Ruby? - PullRequest
2 голосов
/ 15 сентября 2011

Я хочу написать простой метод отладки в Ruby для моего приложения на Rails:

foo = "bar"
debug(foo)

Метод отладки вернет строку "foo: bar".

Как вы получаете название объекта (в нашем случае, foo) в Ruby?

Работа в Ruby 1.92.

Спасибо.

Ответы [ 5 ]

3 голосов
/ 15 сентября 2011

проверить log_buddy

из файла readme:

a = "foo"
@a = "my var"
@@bar = "class var!"
def bark
 "woof!"
end

d { a }      # logs "a = 'foo'"
d { @a }     # logs "@a = 'my var'"
d { @@bar }  # logs "@@bar = 'class var!'"
d { bark }   # logs "bark = woof!"
2 голосов
/ 15 сентября 2011
def debug(var,val)
  puts "#{var}: #{val}"
end

debug("foo",foo)
1 голос
/ 15 сентября 2011

Для полноты вот способ, которым вы должны не сделать это. Это ужасная идея, и она сломается всеми способами:

Согласно Крису Ши , раздел 8.6 в В языке программирования Ruby Фланагана и Матца есть этот фрагмент (комментарии добавлены для ясности):

class Object 
  def get_name #do not use this brittle technique
    line_number   = caller[0].split(':')[1].to_i
    line_executed = File.readlines(__FILE__)[line_number-1] 
    line_executed.match(/(\S+)\.get_name/)[1] #BAD IDEA: parsing Ruby with regular expressions
  end 
end

Он «работает», находя номер строки, с которой был вызван get_name, читает эту строку из текущего запущенного файла и пытается использовать регулярное выражение для анализа имени переменной , С извинениями Zalgo , не попытайтесь проанализировать Ruby с помощью регулярных выражений!

0 голосов
/ 15 сентября 2011

Как обычно с Ruby, для этого есть драгоценный камень: http://thinkrelevance.com/blog/2009/09/23/quick-and-easy-logging-with-logbuddy.html

Выводится на стандартный вывод.

Благодаря Эндрю Гримму (вверху) и Leventix.

0 голосов
/ 15 сентября 2011

Я не уверен, что вы могли бы надежно сделать это, особенно в реализациях Ruby. Какова ваша главная цель в этом? Устранить ручную генерацию семантической информации?

Как уже говорили другие, простая печать имени переменной не обязательно полезна сама по себе: без контекста она может быть не более полезна, чем вывод переменной.

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

Или просто используйте pry .

...