Форматирование 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
)?
В качестве альтернативы, есть ли подобная рубиновая жемчужина, которая предоставляет эту функциональность?
Ответы
Ответ 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
}
]
Ссылка: