-
尚方宝剑之说
p foo打印foo.inspect跟着一个新行,即,它打印的值inspect代替to_s,这是更适合的调试(因为可以例如告诉之间的差1,"1"并且"2\b1",它可以不打印时不inspect)。
-
MMTTMM
同样重要的是要注意puts对已to_s定义的类的“反应” p不会。例如:class T def initialize(i) @i = i end def to_s @i.to_s endendt = T.new 42puts t => 42p t => #<T:0xb7ecc8b0 @i=42>这直接来自.inspect调用,但是在实践中并不明显。
-
长风秋雁
除了上述答案外,控制台输出中还有细微的差别-即是否存在逗号/引号引起来-这可能是有用的:p "+++++">> "+++++"puts "=====">> =====如果您想使用它们的近亲print创建一个简单的进度栏,那么我发现这很有用:array = [lots of objects to be processed]array.size>> 20这给出了100%的进度条:puts "*" * array.size>> ********************这会在每次迭代中添加一个增量*:array.each do |obj| print "*" obj.some_long_executing_processend# This increments nicely to give the dev some indication of progress / time until completion>> ******