gpt4 book ai didi

haskell - 在 .hs 文件上的另一个主函数内运行主函数会改变 IO 行为吗?

转载 作者:行者123 更新时间:2023-12-02 10:12:20 25 4
gpt4 key购买 nike

我目前正在完成我的第一个 Haskell 项目,在工作的最后一步,在连接不同的 Haskell 文件后,我的 I/O 函数似乎表现得很奇怪。

我有一个主文件(f1.hs),它加载多媒体库的一些信息并将其保存到新的.hs文件(f2.hs)上的变量中。我还有一个“数据处理和用户界面”文件(f3.hs),它读取这些变量,并根据用户的命令对它们进行排序并将其显示在屏幕上。此 f3.hs 文件与菜单一起使用,由键盘输入的值 (getLine) 控制。

为了使工作序列“自动”,我在 f1.hs 文件上创建了一个“main”函数,该函数创建了 f2.hs 文件,然后使用 System.Cmd 模块,我做了一个 系统“runhaskell f3.hs”。这会将用户从 f1.hs 文件路由到 f3.hs 的主函数。

奇怪的是,在我这样做之后,所有的getLine似乎都出现在函数提示符的最后一行之前。

它应该出现的是:

Question One.....
Answer: (cursor's place)

但我得到的是:

Question One.....
(cursor's place)
Answer:

只有当我运行haskell f1.hs时才会发生这种情况。如果我尝试直接运行haskell f3.hs,它会正常工作(尽管我无法在最终作业中执行此操作,因为需要首先创建 f2.hs 文件)。我这个序列做错了什么吗?

很抱歉缺少代码,但我认为这对理解问题没有任何帮助......

最佳答案

这通常是由行缓冲引起的,这意味着在打印换行符之前文本实际上不会打印到控制台。解决方案是手动刷新缓冲区,即如下所示:

import System.IO

main = do ...
putStr "Answer: "
hFlush stdout
...

或者,您可以使用 hSetBuffering stdout NoBuffering 禁用缓冲,尽管这会带来轻微的性能损失,因此我建议您在需要打印部分行时手动进行刷新。

关于haskell - 在 .hs 文件上的另一个主函数内运行主函数会改变 IO 行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8735702/

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