【问题标题】:Ruby reopen STDIN without fileRuby在没有文件的情况下重新打开STDIN
【发布时间】:2017-04-14 09:22:46
【问题描述】:

STDIN 可以用 File: 重新打开

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

但它返回 StringIO 错误:

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

我应该始终使用文件重新打开还是可以通过某种方式使用字符串来完成?

【问题讨论】:

    标签: ruby io stdin


    【解决方案1】:

    为什么不重新分配句柄,比如:

    $stdin = StringIO.new('text')
    

    然后您可以像使用常规的 $stdin 句柄一样使用它:

    gets
    # => "text"
    

    documentation on reopen implies you can do this 确实如此,但无论出于何种原因,StringIO 都不是从 IO 派生的,因此它不算作文件句柄,也不能被它使用。

    【讨论】:

    • 我尝试使用 RSpec 测试来存根用户输入。并且 $stdin 分配对它不起作用。
    • 如果您可以控制正在读取的代码,请尝试为输入源创建一个参数,以便您可以像这样调整它以进行测试。
    • 我使用HighLine gem 作为 UI。看起来可以像你建议的那样做something。但我没有足够的技能。
    • 这是一般意义上的操作方式。如果您对新要求有不同的问题,最好提出一个新问题来解决这些问题。保持专注。
    猜你喜欢
    • 2017-07-18
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 2021-10-31
    • 2011-01-18
    相关资源
    最近更新 更多