47

prettyprint(require 'pp')が出力をフォーマットするときに使用する幅を変更することは可能ですか?例えば:

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

最初の配列は、prettyprintが許可する列幅(79文字)内に収まるため、インラインで印刷されます... 2番目の配列は、そうでないため、複数の行に分割されます。しかし、この動作が始まる列を変更する方法が見つかりません。

ppに依存しPrettyPrintます(バッファに異なる幅を許可する方法があります)。ppを最初から書き直すことなく(PrettyPrint直接アクセスすることなく)、のデフォルトの列幅を変更する方法はありますか?

あるいは、この機能を提供する同様のRuby Gemはありますか?

4

2 に答える 2

61
#!/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 でも機能します。

于 2010-01-21T19:18:19.910 に答える