Подтвердить что ты не робот

Форматирование Ruby prettyprint

Можно ли изменить ширину, которую использует printprint (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)?

В качестве альтернативы, есть ли подобная рубиновая жемчужина, которая предоставляет эту функциональность?

4b9b3361

Ответ 1

#!/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

Ответ 2

Найдено "ap" aka "Awesome_Print", полезный также из git -repo

Код, используемый для проверки pp и ap:

require 'pp'
require 'ap' #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

O/P из pp vs ap:

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
    }
]

Ссылка: