编辑:不要打扰阅读这个问题,我只是无法删除它。它基于损坏的代码,这里(几乎)没有什么可学的。
我在我的 Ruby 程序中重定向控制台输出,虽然它运行良好,但我很好奇一件事:
这是我的代码
capture = StringIO.new
$stdout = capture
puts "Hello World"
看起来即使我将我的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