編輯:不要打擾讀這個問題,我只是不能刪除它。它基於破碎的代碼,這裏幾乎沒有什麼可學的。
我重定向控制檯輸出在我的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'這行代碼實際上是一個代碼的佔位符,我從別人那裏繼承過來,而且我沒有非常徹底地檢查它。 - 那太浪費時間了,但是謝謝你幫助我! –