2010-02-12 18 views

回答

1

你爲什麼假設Kernel#p用於調試?

$stderr.puts(x.inspect) 

順便說一句,如果你真的想用printf調試I:如果你想寫入標準錯誤,你可以做到這一點寫入stdout就像C.

內核#print或printf建議您閱讀這個article about debugging techniques

+0

難道你不是指'$ stderr.puts(x.inspect)'? – 2010-02-12 08:51:31

+0

如果你想要Kernel#p的行爲,是的。 – 2010-02-12 08:55:25

2

您可以定義一個全局函數「q」,除了打印到$ stderr之外,其功能與「p」相似。

#!/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,所以通常不是問題。但是這是一個調試工具,你最終會用它來找出線程中發生了什麼。