编辑:不要打扰读这个问题,我只是不能删除它。它基于破碎的代码,这里几乎没有什么可学的。
我重定向控制台输出在我的Ruby程序,虽然它完美的作品有一两件事我很好奇:
这里是我的代码
capture = StringIO.new
$stdout = capture
puts "Hello World"
看起来即使我m将capture
对象分配给$stdout
,$stdout
在赋值后包含一个新的不同对象,但至少该类型是正确的。
换句话说:
$stdout.to_s # => #<IO:0x2584b30>
capture = StringIO.new
$stdout = capture
$stdout.to_s # => #<StringIO:0x4fda948>
capture.to_s # => #<StringIO:0x4e3b220>
随后$stdout.string
包含"Hello World"
,但capture.string
是空的。
在幕后发生了什么或者我在这里错过了什么吗?
编辑:这可能只针对某些版本。我在Windows 8.1上使用Ruby 2.0.0-p247
也许它是重复? –
是你的实际代码吗? – Stefan
对不起,Felix和falsetru是正确的,'$ stdout'的值随后发生了变化。我没有注意到,因为'Hello World'这行代码实际上是一个代码的占位符,我从别人那里继承过来,而且我没有非常彻底地检查它。 - 那太浪费时间了,但是谢谢你帮助我! –