2016-11-30 72 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