Вы можете определить глобальную функцию "q", которая работает так же, как "p", за исключением того, что она печатает в $ stderr.
#!/usr/bin/ruby1.8
module Kernel
def q(*stuff)
stuff.each { |thing| $stderr.print(thing.inspect + "\n")}
end
end
q 'foo' # => "foo"
Вы можете испытать желание использовать puts
вместо print ... + "\n"
. Этот код использует print
, чтобы сделать его потокобезопасным: puts
может быть прервано между временем, когда он печатает свои аргументы, и временем, когда он печатает новую строку, в результате чего выходные данные из двух потоков появляются в одной строке. Редко, когда у вас есть код из нескольких потоков, одновременно записывающих в $ stdout / $ stderr, поэтому обычно это не проблема. Но так как это инструмент отладки, вы наверняка в конечном итоге будете использовать его, чтобы узнать, что происходит в потоках.