легко и чисто ставит рубин

У меня очень часто бывает ситуация, что я хочу что-то отладить в Ruby. Затем у меня есть вывод на консоль с «путями».

Следующий пример:

Testvariable = 4
puts Testvariable

Выход конечно:

4

Сейчас у меня много выходов и поэтому я очень часто пишу что-то вроде этого:

Testvariable = 4
puts "Testvariable= " + Testvariable

Результат тогда:

Testvariable= 4

Теперь это был очень простой случай, но я надеюсь, что он показывает, в чем заключается мой вопрос. Есть ли такая возможность???

Testvariable = 4
prettyputs Testvariable

и что вывод напрямую

Testvariable = 4

Надеюсь, вы понимаете, в чем моя «проблема»? Конечно, записать всю строку не так уж и сложно, но я просто хочу знать, есть ли быстрая и простая возможность?


person user1916608    schedule 19.11.2014    source источник
comment
@MarekLipka: кажется тривиальным с eval. prettyputs 'Testvariable'   -  person Sergio Tulentsev    schedule 19.11.2014
comment
@SergioTulentsev, ты прав. Вы добавите правильный пример в качестве ответа?   -  person Marek Lipka    schedule 19.11.2014
comment
@MarekLipka: нет, давай. :)   -  person Sergio Tulentsev    schedule 19.11.2014
comment
Или… вы можете просто использовать отладчик для отладки.   -  person Jörg W Mittag    schedule 19.11.2014


Ответы (2)


Это дубликат: Ruby: получение имени переменной

Вкратце: вы не можете получить имя переменной, но вы можете поставить строку или символ с именем переменной, которую вы хотите отобразить

def prettyputs(symb, the_binding)
  var_name  = symb.to_s
  var_value = eval(var_name, the_binding)
  puts "#{var_name} = #{var_value.inspect}"
end

toto=1
prettyputs "toto",binding

or

prettyputs :toto,binding
person tomsoft    schedule 19.11.2014
comment
да, если бы только можно было избежать связывания. - person Sergio Tulentsev; 19.11.2014
comment
@SergioTulentsev binding_of_caller спешит на помощь - person Stefan; 19.11.2014

Есть гем под названием "ap" awesome_print, который делает более или менее то, что вы хотите.

Случай, который вы перечислили здесь, на самом деле не отвечает на вопрос, и, возможно, если вы «ставите» что-то, вы можете узнать больше об инструментах отладки и тестирования.

Из документации AP обратите внимание на следующее:

data = [ false, 42, %w(forty two), { :now => Time.now, :class => Time.now.class, :distance => 42e42 } ]

Печатать это с помощью встроенной в Ruby функции puts было бы беспорядок, но AP печатает следующее:

$ ruby 1.rb
[
    [0] false,
    [1] 42,
    [2] [
        [0] "forty",
        [1] "two"
    ],
    [3] {
           :class => Time < Object,
             :now => Fri Apr 02 19:55:53 -0700 2010,
        :distance => 4.2e+43
    }
]

Я понимаю, что это не совсем то, что вы хотите, но, возможно, следующее будет одинаково полезно:

puts TestVariable.inspect

так как вы назвали его в верхнем регистре, я предполагаю, что это класс или константа, и вы хотите увидеть его тип, что .inspect сделает за вас.

person Lee Hambley    schedule 19.11.2014
comment
Я думаю, он хочет автоматически поставить имя переменной и знак равенства перед значением. - person Sebastian vom Meer; 19.11.2014
comment
это именно то, что я хочу. Это не обязательно должен быть знак равенства. просто любой знак. Просто было интересно, есть ли ответ... - person user1916608; 19.11.2014
comment
Это невозможно, так как переменная является ссылкой на какой-то канонический экземпляр вещи в памяти, иногда вещи могут иметь более одного имени, поэтому Ruby не может даже подумать о себе, чтобы показать имя, поскольку нет одно имя. - person Lee Hambley; 19.11.2014