【发布时间】:2022-01-09 23:56:32
【问题描述】:
我是从《Learn You a Haskell For Great Good》一书中学习 Haskell 的。有这个代码
import Control.Monad
import Data.Char
main = forever $ do
putStr "Give me some input: "
l <- getLine
putStrLn $ map toUpper l
当我最初在 gitbash 中运行此代码时,它只是在给出输入文本并按 Enter 后询问任何输入(假设输入文本是 soham)它显示 Give me some input: SOHAM。
然后我将代码更改为
import Control.Monad
import Data.Char
main = forever $ do
putStrLn "Give me some input: "
l <- getLine
putStrLn $ map toUpper l
运行后它显示Give me some input: 并要求输入。在给出相同的输入soham 后,它显示SOHAM
再次将代码更改为
import Control.Monad
import Data.Char
main = forever $ do
putStr "Give me some input: "
l <- getLine
putStr $ map toUpper l
它只是一次又一次地接受输入,当我按下文件结束键(ctrl+C)时,它会并排显示所有输出,但输出就像原始代码一样。
为什么会发生这种变化?
【问题讨论】:
-
这是由于行缓冲,在
putStrLn之前使用hSetBuffering stdout NoBuffering(导入System.IO)。 -
请删除您的图形,因为它会影响可访问性。而是剪切并粘贴您的输出。谢谢。