sep*_*p2k 323
p foo打印foo.inspect后跟一个换行符,即它打印的值inspect代替to_s,更适合调试(因为你可以告诉它们之间的区别1,"1"并且"2\b1",在没有打印时你不能inspect).
ezp*_*zpz 54
同样重要的是要注意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>
Run Code Online (Sandbox Code Playgroud)
这直接来自.inspect呼叫,但在实践中并不明显.
Aug*_*aas 37
p foo 是相同的 puts foo.inspect
\n\n\n\n\n
puts(obj, ...) \xe2\x86\x92 nil将给定对象写入 ios。在任何尚未以换行符序列结尾的行之后写入换行符。返回 nil。
\n\n必须打开流才能写入。如果使用数组\n 参数调用,则将每个元素写入新行。每个不是字符串或数组的给定对象\n 将通过调用其
\nto_s\n 方法进行转换。如果不带参数调用,则输出一个换行符。
我们在 irb 上试试
\n\n# always newline in the end \n>> puts # no arguments\n\n=> nil # return nil and writes a newline\n>> puts "sss\\nsss\\n" # newline in string\nsss\nsss\n=> nil\n>> puts "sss\\nsss" # no newline in string\nsss\nsss\n=> nil\n\n# for multiple arguments and array\n>> puts "a", "b"\na\nb\n=> nil\n>> puts "a", "b", ["c", "d"]\na\nb\nc\nd\n=> nil\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\n\n
p(obj) \xe2\x86\x92 obj click to toggle source
\np(obj1, obj2, ...) \xe2\x86\x92 [obj, ...]\n \n 对于每个对象,直接将后跟换行符写入程序\xe2\x80\x99s 标准输出。p() \xe2\x86\x92 nilobj.inspect
在IRB中
\n\n# no arguments\n>> p\n=> nil # return nil, writes nothing\n# one arguments\n>> p "sss\\nsss\\n" \n"sss\\nsss\\n"\n=> "aaa\\naaa\\n"\n# multiple arguments and array\n>> p "a", "b"\n"a"\n"b"\n=> ["a", "b"] # return a array\n>> p "a", "b", ["c", "d"]\n"a"\n"b"\n["c", "d"]\n=> ["a", "b", ["c", "d"]] # return a nested array\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
63881 次 |
| 最近记录: |