3 回答
TA贡献1788条经验 获得超4个赞
p foo
打印foo.inspect
跟着一个新行,即,它打印的值inspect
代替to_s
,这是更适合的调试(因为可以例如告诉之间的差1
,"1"
并且"2\b1"
,它可以不打印时不inspect
)。
TA贡献1869条经验 获得超4个赞
同样重要的是要注意puts对已to_s定义的类的“反应” p不会。例如:
class T
def initialize(i)
@i = i
end
def to_s
@i.to_s
end
end
t = T.new 42
puts t => 42
p t => #<T:0xb7ecc8b0 @i=42>
这直接来自.inspect调用,但是在实践中并不明显。
TA贡献1757条经验 获得超7个赞
除了上述答案外,控制台输出中还有细微的差别-即是否存在逗号/引号引起来-这可能是有用的:
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_process
end
# This increments nicely to give the dev some indication of progress / time until completion
>> ******
- 3 回答
- 0 关注
- 474 浏览
添加回答
举报