为什么内核#p打印到标准输出?

时间:2010-02-12 07:12:21

标签: ruby

为什么内核#p打印到标准输出?是不是printf debugging应该输出到标准错误?

2 个答案:

答案 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