为什么内核#p打印到标准输出?是不是printf debugging应该输出到标准错误?
答案 0 :(得分:2)
你可以定义一个全局函数“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,所以它通常不是问题。但这是一个调试工具,你最终会用它来找出线程中发生了什么。
答案 1 :(得分:1)
为什么假设内核#p用于调试?它写入stdout就像C中的Kernel#print或printf一样。
如果你想写标准错误,你可以这样做:
$stderr.puts(x.inspect)
顺便说一句,如果你真的想使用printf调试我建议你阅读这个article about debugging techniques