47 votes

Formatage de la jolie impression de Ruby

Est-il possible de modifier la largeur que prettyprint (require 'pp') utilise lors de la mise en forme de la sortie? Par exemple:

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

Le premier tableau est imprimé inline, car il s'inscrit à l'intérieur de la largeur de la colonne prettyprint permet (79 caractères)... la deuxième est répartie sur plusieurs lignes, car il n'a pas. Mais je ne trouve pas de méthode pour changer la colonne que ce problème commence.

pp dépend PrettyPrint (qui a des moyens pour permettre aux différentes largeurs de la zone tampon). Est-il possible de modifier la largeur de colonne par défaut pour pp, sans avoir à réécrire à partir de zéro (l'accès à l' PrettyPrint directement)?

Sinon, est-il semblable ruby gem, qui propose cette fonctionnalité?

61voto

Wayne Conrad Points 31052
 #!/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"]
 

Pour changer la valeur par défaut avec un patch de singe:

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

Ces méthodes fonctionnent également en IRM 1.9.3

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X