From: Sam Roberts Date: 2005-02-27T01:32:27+09:00 Subject: Re: implementing #to_pp, and pp.rb doc diffs (Re: Requesting addition to IRB (configurable standard output)) Quoting drbrain@segment7.net, on Sat, Feb 26, 2005 at 03:49:49PM +0900: > On 25 Feb 2005, at 18:55, Sam Roberts wrote: > > >Quoting drbrain@segment7.net, on Sat, Feb 26, 2005 at 10:24:52AM +0900: > >>On 25 Feb 2005, at 16:03, Sam Roberts wrote: > >>>Quoting drbrain@segment7.net, on Sat, Feb 26, 2005 at 02:43:31AM > >>>+0900: > >>>>On 24 Feb 2005, at 19:51, Sam Roberts wrote: > >>>>>module Kernel > >>>>> def to_pp > >>>>> s = PP.pp(self, '') > >>>>> s.chomp! > >>>>> s > >>>>> end > >>>>> alias_method :to_irb :to_pp > >>>>>end > >>>> > >>>>Object#prettyprint > >>> > >>>$ irb -r pp > >>>irb(main):001:0> [1,2,3].prettyprint > >>>NoMethodError: undefined method `prettyprint' for [1, 2, 3]:Array > >>> from (irb):1 > >> > >>Oh that's right its pretty_print and it takes an arg, making it less > >>useful than my first glance through pp.rb revealed. > >> > >>I resubmit with Object#pretty_print_inspect > > > >Did you try? > > It only works for builtins. If you want fancy printing for your > objects you must define pretty_print. Your (series) of suggestions was to the effect that I didn't have to write my #to_pp, it somehow exists already, was it not? Or are you just listing methods that PP has, that CANNOT be used to replace #inspect, in the hope that is helpful? > >It would be nice if this worked. Perhaps it should be an RCR, or is > >there actually a method that does this that neither of us have found? > > The problem is, how do you write a generic way of prettily printing > every object you could come across? #inspect is a good default, but > being prettier than that is hard. I submit that #inspect is much prettier than raising a runtime error. > Instead, PrettyPrint leaves it up to you. Leaving #pretty_print_inspect useless for the purpose you are suggesting it, replacing #inspect, unless I very much misunderstand what you are talking about. Also, you keep saying "you", as if it is MY objects that lack #pretty_print, it is ALL objects other than a dozen builtins that lack it, and I am not about to define #pretty_print for all the standard library: irb(main):003:0> Date.new.pretty_print_inspect RuntimeError: pretty_print is not overridden. from /usr/local/lib/ruby/1.8/pp.rb:383:in `pretty_print_inspect' from (irb):3 Note that Kernel.pp uses the perfectly reasonable default: irb(main):004:0> pp Date.new # => nil As does #to_pp: irb(main):003:0> Date.new.to_pp => "#" Good day, Sam