gpt4 book ai didi

haskell - GHCi 和编译的代码似乎表现不同

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

我有一个非常奇怪的问题。与在 ghci 中运行相比,以下代码在编译时给出了不同的结果,

main = do
putStr "Please enter your name: "
name <- getLine
putStr ("Hello, " ++ name ++ ", how are you?")

当在 ghci 中运行它时,它正如人们所期望的那样,

Please enter your name: dglmoore
Hello, dglmoore, how are you?

但是,当我将代码编译为可执行文件时,它要求我在生成任何输出之前提供输入,因此我最终得到了这个,

dglmoore
Please enter your name: Hello, dglmoore, how are you?

我以前见过类似的问题,但我似乎找不到它了。

我使用的是 Haskell 平台版本 2012.2.0.0 中的 ghc 版本 7.4.1。

有人知道为什么他们给出不同的结果以及我如何让两个版本做“正确”的事情吗?

最佳答案

这是一个缓冲问题。通常 IO 是行缓冲的(即,除非您显式刷新缓冲区,否则输出实际上不会显示在屏幕上,直到您打印新行或超出缓冲区大小)。在 ghci 中则不然,因此问题不会出现。

您可以在调用 getLine 之前使用 hFlush stdout 刷新 stdout,从而将输出打印到屏幕上。

或者,您可以使用 hSetBuffering NoBuffering 完全禁用缓冲,从而不再需要 hFlush。但这可能会对 IO 性能产生负面影响。

关于haskell - GHCi 和编译的代码似乎表现不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11926398/

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