如何缓存输出? (比如php中的ob_start())

时间:2012-04-15 17:10:54

标签: ruby

如何缓存“puts”和“print”结果,并将其保存到变量中。与php中的ob_start()ob_get_contents()一样。

2 个答案:

答案 0 :(得分:2)

有些人可能会发布使用我不熟悉的红宝石标准库部分的巧妙解决方案。我只能为你提供这个小脏猴子补丁:

module Kernel
  alias_method :old_puts, :puts

  def puts txt
    @cached_output ||= ''
    @cached_output += "#{txt}\n"
    old_puts txt
  end

  def cached_output
    @cached_output
  end
end

puts 'foo'
puts 'bar'
cached_output # => "foo\nbar\n"

答案 1 :(得分:1)

require 'stringio'

save_so, $stdout = $stdout, StringIO.new(' ', 'w')
puts 'how now brown cow'
my_so, $stdout = $stdout, save_so

p [:saved_result, my_so.string]
puts 'and this works once again'