From: Robert Klemme Date: 2007-06-29T06:25:12+09:00 Subject: Re: pretty_print woes On 28.06.2007 15:42, John Joyce wrote: > > On Jun 28, 2007, at 8:26 AM, Ronald Fischer wrote: > >>>> require 'pp' >>>> .... >>>> result=foo(bar) >>>> $my_message="The function call foo("+ >>>> bar.pretty_print_inspect+ >>>> ") returned: "+result.pretty_print_inspect >>>> >>>> This works well most of the time, for example if the values >>> formatted >>>> with pretty_print_inspect are arrays or numbers. I get, however, a >>>> runtime error when calling for String: >>>> >>>> "abc".pretty_print_inspect >>>> RuntimeError: pretty_print is not overridden for String >>>> >>>> Is there a different way to use the module pp, so that its >>> output goes >>>> to a string? >>> irb(main):009:0> puts "foo\"bar".pretty_inspect >>> "foo\"bar" >>> => nil >> >> Thanks a lot! Nearly perfect!! (Actually, I use pretty_inspect.chomp, >> because pretty_inspect adds a \n to the formatted string). >> >> Ronald >> > Actually, puts is adding that \n to the string, but your result is what > you wanted! No, #pretty_inspect actually adds it: irb(main):001:0> "a".pretty_inspect => "\"a\"\n" Ronald, #pretty_inspect can actually add newlines itself: irb(main):004:0> ha=(1..10).inject({}) {|h,i| h[i] = Array.new(i, i); h} => {5=>[5, 5, 5, 5, 5], 6=>[6, 6, 6, 6, 6, 6], 1=>[1], 7=>[7, 7, 7, 7, 7, 7, 7], 2=>[2, 2], 8=>[8, 8, 8, 8, 8, 8, 8, 8], 3=>[3, 3, 3], 9=>[9, 9, 9, 9, 9, 9, 9, 9, 9], 4=>[4, 4, 4, 4], 10=>[10, 10, 10, 10, 10, 10, 10, 10, 10, 10]} irb(main):005:0> ha.pretty_inspect => "{5=>[5, 5, 5, 5, 5],\n 6=>[6, 6, 6, 6, 6, 6],\n 1=>[1],\n 7=>[7, 7, 7, 7, 7, 7, 7],\n 2=>[2, 2],\n 8=>[8, 8, 8, 8, 8 , 8, 8, 8],\n 3=>[3, 3, 3],\n 9=>[9, 9, 9, 9, 9, 9, 9, 9, 9],\n 4=>[4, 4, 4, 4],\n 10=>[10, 10, 10, 10, 10, 10, 10, 10, 10, 10]}\n" irb(main):006:0> puts ha.pretty_inspect {5=>[5, 5, 5, 5, 5], 6=>[6, 6, 6, 6, 6, 6], 1=>[1], 7=>[7, 7, 7, 7, 7, 7, 7], 2=>[2, 2], 8=>[8, 8, 8, 8, 8, 8, 8, 8], 3=>[3, 3, 3], 9=>[9, 9, 9, 9, 9, 9, 9, 9, 9], 4=>[4, 4, 4, 4], 10=>[10, 10, 10, 10, 10, 10, 10, 10, 10, 10]} => nil irb(main):007:0> Kind regards robert