gpt4 book ai didi

haskell - 无法写入标准输入

转载 作者:行者123 更新时间:2023-12-03 08:31:54 25 4
gpt4 key购买 nike

我正在开发一个使用 REPL 的程序,我们可以在其中提示命令,并且我想添加一个功能来处理向上箭头以显示以前输入的命令,就像在 bash 中一样。我遇到的问题是我找不到如何在标准输入上打印我之前的命令。

我尝试过像这样使用 hPutStr:

hPutStr stdin "Test"

但是当我运行它时,我遇到了这个错误:

<stdin>: hPutStr: illegal operation (handle is not open for writing)

有谁知道如何绕过此限制,或者只是另一种在标准输入上打印内容的方法?

最佳答案

不幸的是,你无法沿着你选择的道路到达你想去的地方。

相反,您需要做的是这样的:

  1. 将 stdin 设置为无缓冲,以便您可以在用户输入发生时立即获取它。
  2. 当他们打来时,将您记得他们上次输入的内容打印到标准输出。 (不要忘记先清除他们已经输入的任何内容。)
  3. 在程序的某个变量中,记录他们上次输入的当前文本。
  4. 当您从标准输入接收新输入时,使用它来更新屏幕上显示的文本和变量中记录的文本。使用默认的终端设置,新的字母、数字和标点符号等会自动出现在屏幕上,因此您只需更新变量即可;但你需要专门处理退格键之类的事情。
  5. 用户按下 Enter 键后,查看变量中的内容,而不是直接获取从 stdin 获取的内容。

强烈建议您使用一个已经实现并检查了所有这些错误的库;如果你自己编写它,你可能需要了解更多关于终端如何工作的知识,而不是你真正想知道的,即使这样,也有很多方法会导致它出错。

关于haskell - 无法写入标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64858880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com