代码之家  ›  专栏  ›  技术社区  ›  collimarco

P Vs放入Ruby

  •  254
  • collimarco  · 技术社区  · 16 年前

    两者有什么区别吗 p puts 红宝石?

    6 回复  |  直到 7 年前
        1
  •  314
  •   M. Glatki    9 年前

    p foo 印刷品 foo.inspect 然后是换行符,即它打印 inspect 而不是 to_s ,这更适合于调试(因为您可以 1 , "1" "2\b1" ,打印时如果没有 检查 )

        2
  •  53
  •   Pierre-Adrien    11 年前

    同样重要的是要注意 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 但在实践中并不明显。

        3
  •  38
  •   August Lilleaas    16 年前

    p foo 是一样的 puts foo.inspect

        4
  •  2
  •   Jonathan_W    8 年前

    除了上述答案外,控制台输出中还有一个细微的差异,即是否存在反逗号/引号,这一点可能有用:

    p "+++++"
    >> "+++++"
    
    puts "====="
    >> =====
    

    如果你想用他们的近亲制作一个简单的进度条,我觉得这很有用, 打印 :

    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
    >> ******
    
        5
  •  1
  •   Fangxing    8 年前

    ruby-2.4.1 document

    puts(obj, ...) → nil

    将给定对象写入iOS。写一个 换行符 在那之后 做 还没有 以换行序列结尾。 返回零 .

    必须打开流进行写入。如果使用 数组 参数,写入 每个元素 在一条新的线上。每个给定对象 它不是字符串或数组,将通过调用它的 to_s 方法。如果不带参数调用,则输出单个换行符。

    让我们在IRB上试试

    # always newline in the end 
    >> puts # no arguments
    
    => nil # return nil and writes a newline
    >> puts "sss\nsss\n" # newline in string
    sss
    sss
    => nil
    >> puts "sss\nsss" # no newline in string
    sss
    sss
    => nil
    
    # for multiple arguments and array
    >> puts "a", "b"
    a
    b
    => nil
    >> puts "a", "b", ["c", "d"]
    a
    b
    c
    d
    => nil
    

    p(obj) → obj click to toggle source
    p(obj1, obj2, ...) → [obj, ...] p() → nil
    对于每个对象,直接写入 obj.inspect 然后是程序标准输出的新行。

    在IRB中

    # no arguments
    >> p
    => nil # return nil, writes nothing
    # one arguments
    >> p "sss\nsss\n" 
    "sss\nsss\n"
    => "aaa\naaa\n"
    # multiple arguments and array
    >> p "a", "b"
    "a"
    "b"
    => ["a", "b"] # return a array
    >> p "a", "b", ["c", "d"]
    "a"
    "b"
    ["c", "d"]
    => ["a", "b", ["c", "d"]] # return a nested array
    
        6
  •  1
  •   apadana    7 年前

    这2个相等:

    p "Hello World"  
    puts "Hello World".inspect
    

    ( 检查 提供对象的更直接的视图,而不是 托斯 方法)

    推荐文章