【问题标题】:Formatting Ruby's prettyprint格式化 Ruby 的漂亮打印
【发布时间】:2011-01-07 21:28:09
【问题描述】:

是否可以更改 prettyprint (require 'pp') 在格式化输出时使用的宽度?例如:

"mooth"=>["booth", "month", "mooch", "morth", "mouth", "mowth", "sooth", "tooth"]
"morth"=>["forth",
 "mirth",
 "month",
 "mooth",
 "morph",
 "mouth",
 "mowth",
 "north",
 "worth"]

第一个数组是内联打印的,因为它适合漂亮打印允许的列宽(79 个字符)...第二个数组被拆分为多行,因为它没有。但我找不到更改此行为开始所在的列的方法。

pp 取决于PrettyPrint(它有办法允许缓冲区有不同的宽度)。有什么方法可以更改pp 的默认列宽,而无需从头开始重写(直接访问PrettyPrint)?

或者,是否有类似的 ruby​​ gem 提供此功能?

【问题讨论】:

    标签: ruby pretty-print


    【解决方案1】:

    git-repo 发现“ap”又名“Awesome_Print”也很有用

    用于测试pp和ap的代码:

    require 'pp'
    require "awesome_print" #requires gem install awesome_print 
    
    data = [false, 42, %w{fourty two}, {:now => Time.now, :class => Time.now.class, :distance => 42e42}]
    puts "Data displayed using pp command"
    pp data
    
    puts "Data displayed using ap command"
    ap data
    

    来自 pp 与 ap 的 O/P:

    Data displayed using pp command
    [false,
     42,
     ["fourty", "two"],
     {:now=>2015-09-29 22:39:13 +0800, :class=>Time, :distance=>4.2e+43}]
    
    Data displayed using ap command
    [
        [0] false,
        [1] 42,
        [2] [
            [0] "fourty",
            [1] "two"
        ],
        [3] {
                 :now => 2015-09-29 22:39:13 +0800,
               :class => Time < Object,
            :distance => 4.2e+43
        }
    ]
    

    参考:

    【讨论】:

    • 这是有趣的附加信息。然而,这并不是对所问问题的真正答案——也就是说,根据 OP 正在寻找的内容,"fourty", "two" 应该在一条线上。另外,我认为对于任何值得考虑使用哪个的人来说,值得注意的是此处显示的ap 输出无法通过 ruby​​ eval 读回(特别是因为数组索引以这种方式显示),@ 987654328@ 输出经常可能是(它只更改基本对象类型的空格——尽管时间对象清楚地显示了一个例外)。只是思考的食物。
    【解决方案2】:
    #!/usr/bin/ruby1.8
    
    require 'pp'
    mooth = [
      "booth", "month", "mooch", "morth",
      "mouth", "mowth", "sooth", "tooth"
    ]
    PP.pp(mooth, $>, 40)
    # => ["booth",
    # =>  "month",
    # =>  "mooch",
    # =>  "morth",
    # =>  "mouth",
    # =>  "mowth",
    # =>  "sooth",
    # =>  "tooth"]
    PP.pp(mooth, $>, 79)
    # => ["booth", "month", "mooch", "morth", "mouth", "mowth", "sooth", "tooth"]
    

    使用猴子补丁更改默认值:

    #!/usr/bin/ruby1.8
    
    require 'pp'
    
    class PP
      class << self
        alias_method :old_pp, :pp
        def pp(obj, out = $>, width = 40)
          old_pp(obj, out, width)
        end
      end
    end
    
    mooth = ["booth", "month", "mooch", "morth", "mouth", "mowth", "sooth", "tooth"]
    pp(mooth)
    # => ["booth",
    # =>  "month",
    # =>  "mooch",
    # =>  "morth",
    # =>  "mouth",
    # =>  "mowth",
    # =>  "sooth",
    # =>  "tooth"]
    

    这些方法也适用于 MRI 1.9.3

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-06
      • 2016-02-25
      • 2012-03-07
      • 2021-09-19
      • 2012-05-08
      • 2011-03-21
      • 1970-01-01
      相关资源
      最近更新 更多