当前位置: 首页 > 文档资料 > Haskell 中文教程 >

输入和输出( Input & Output)

优质
小牛编辑
135浏览
2023-12-01

到目前为止我们讨论过的所有例子都是静态的。 在本章中,我们将学习与用户动态通信。 我们将学习Haskell中使用的不同输入和输出技术。

文件和流

到目前为止,我们已经对程序本身的所有输入进行了硬编码。 我们一直在从静态变量中获取输入。 现在,让我们学习如何从外部文件读取和写入。

让我们创建一个文件并将其命名为“abc.txt”。 接下来,在此文本文件中输入以下行:“欢迎使用IoWiki。在这里,您将获得学习Haskell的最佳资源。”

接下来,我们将编写以下代码,该代码将在控制台上显示此文件的内容。 在这里,我们使用readFile()函数读取文件,直到找到EOF字符。

main = do  
   let file = "abc.txt" 
   contents <- readFile file 
   putStrLn contents   

上面的代码将文件“abc.txt”作为String读取,直到遇到任何End of File字符。 这段代码将生成以下输出。

Welcome to IoWiki
Here, you will get the best resource to learn Haskell.

观察终端上打印的内容是否写入该文件中。

Command Line Argument

Haskell还提供了通过命令提示符操作文件的工具。 让我们回到我们的终端并输入"ghci" 。 然后,键入以下命令集 -

let file = "abc.txt" 
writeFile file "I am just experimenting here." 
readFile file 

在这里,我们创建了一个名为“abc.txt”的文本文件。 接下来,我们使用命令writeFile在文件中插入了一个语句。 最后,我们使用命令readFile在控制台上打印文件的内容。 我们的代码将产生以下输出 -

I am just experimenting here.

异常 (Exceptions)

可以将exception视为代码中的错误。 这是编译器在运行时没有获得预期输出的情况。 与任何其他优秀的编程语言一样,Haskell提供了一种实现异常处理的方法。

如果你熟悉Java,那么你可能知道Try-Catch块,我们通常会抛出一个错误并在catch块中catch 。 在Haskell中,我们也有相同的函数来捕获运行时错误。

try的函数定义看起来像“try :: Exception e =”IO a - “IO(Either)”。 看一下下面的示例代码。 它显示了如何捕获“除以零”异常。

import Control.Exception 
main = do 
   result <- try (evaluate (5 `div` 0)) :: IO (Either SomeException Int) 
   case result of 
      Left ex   -> putStrLn $ "Caught exception: " ++ show ex 
      Right val -> putStrLn $ "The answer was: " ++ show val 

在上面的例子中,我们使用了Control.Exception模块的内置try函数,因此我们预先捕获异常。 上面的代码将产生屏幕下方的输出。

Caught exception: divide by zero