From: Robert Dober Date: 2010-03-05T16:50:49+09:00 Subject: Re: Outputting to a string On Fri, Mar 5, 2010 at 6:47 AM, Albert Schlef wrote: > I have a function that generates some textual data that I capture into a > string: > >  def gen_data(output, ...) >    ... >    output << "... some data ..." >    ... >  end > >  s = '' >  gen_data(s, ...) > > I was wondering if instead it's possible to use a pattern similar to the > following: > >  def gen_data(...) >    ... >    puts "... some data ..." >    ... >  end > >  s = capture_output do >    gen_data(...) >  end > > That's because I want to pass gen_data() as few arguments as possible > (to make the code look "clean". But also because my current code already > uses 'puts'. And also because I encountered this need several times in > the past and I'm curious.) > > I notice that this last pattern has a problem: if some debugging code > uses 'puts' too, the output will be ruined. So I'm interested to hears > about similar patterns and not necessarily the faulty one I devised > here. > -- > Posted via http://www.ruby-forum.com/. > > very ugly, but I am sure you can c?lean it up require 'stringio' def gen_data; puts "42, I believe" end def with_stdout &blk s=StringIO::new o=$stdout $stdout=s blk[] s.string ensure $stdout=o end HTH R -- Learning without thought is labor lost; thought without learning is perilous.” --- Confucius