2016-11-30 115 views
0

標準輸入可以使用文件重新打開:紅寶石重開STDIN沒有文件

STDIN.reopen(File.open('filename')) 

但用StringIO返回錯誤:

STDIN.reopen(StringIO.new('text')) 
TypeError: 
     no implicit conversion of StringIO into String 

我應該使用文件重新打開始終,也可以使用字符串來完成某種程度上來說?

回答

0

爲什麼不重新分配的手柄,如:

$stdin = StringIO.new('text') 

然後你就可以與工作,你會經常$stdin手柄:

gets 
# => "text" 

這是真的,documentation on reopen implies you can do this,但不管是什麼原因StringIO不是從IO派生出來的,所以它不算作文件句柄,也不能用於此目的。

+0

我嘗試用RSpec測試存根用戶輸入。 $ stdin賦值不起作用。 – Michael

+0

如果您可以控制正在進行讀取的代碼,請嘗試爲輸入源創建一個參數,以便您可以將其調整爲用於測試目的。 – tadman

+0

我爲UI使用[HighLine gem](https://github.com/JEG2/highline)。它看起來有可能像你所說的那樣做[something](http://www.rubydoc.info/github/JEG2/highline/master/Kernel)。但是我還沒有爲此提供技能。 – Michael