- Haskell 教程
- Haskell - 首页
- Haskell - 概述
- Haskell - 环境搭建
- Haskell - 基本数据模型
- Haskell - 基本运算符
- Haskell - 决策机制
- Haskell - 类型和类型类
- Haskell - 函数
- Haskell - 函数详解
- Haskell - 函数组合
- Haskell - 模块
- Haskell - 输入与输出
- Haskell - Functor (函子)
- Haskell - Monad (单子)
- Haskell - Zipper (拉链)
- Haskell 有用资源
- Haskell - 快速指南
- Haskell - 有用资源
- Haskell - 讨论
Haskell - 输入与输出
到目前为止,我们讨论的所有示例都是静态的。在本章中,我们将学习如何与用户动态交互。我们将学习Haskell中使用的不同的输入和输出技术。
文件和流
到目前为止,我们一直在程序中硬编码所有输入。我们一直在从静态变量获取输入。现在,让我们学习如何从外部文件读取和写入。
让我们创建一个文件并将其命名为“abc.txt”。接下来,在此文本文件中输入以下几行:“欢迎来到 Tutorialspoint。在这里,您将获得学习 Haskell 的最佳资源。”
接下来,我们将编写以下代码,该代码将显示此文件的内容到控制台。在这里,我们使用 `readFile()` 函数读取文件,直到找到 EOF 字符。
main = do let file = "abc.txt" contents <- readFile file putStrLn contents
上述代码将读取“abc.txt”文件作为一个字符串,直到遇到任何文件结束符。这段代码将生成以下输出。
Welcome to Tutorialspoint Here, you will get the best resource to learn Haskell.
观察一下,终端上打印的内容都写在该文件中。
命令行参数
Haskell 还提供了通过命令提示符操作文件的功能。让我们回到终端并键入“ghci”。然后,键入以下命令集:
let file = "abc.txt" writeFile file "I am just experimenting here." readFile file
在这里,我们创建了一个名为“abc.txt”的文本文件。接下来,我们使用 `writeFile` 命令在文件中插入了一条语句。最后,我们使用 `readFile` 命令将文件的内容打印到控制台。我们的代码将产生以下输出:
I am just experimenting here.
异常
异常可以被认为是代码中的错误。在这种情况下,编译器在运行时无法获得预期的输出。与任何其他优秀的编程语言一样,Haskell 提供了一种实现异常处理的方法。
如果您熟悉 Java,那么您可能知道 Try-Catch 块,我们通常在其中抛出错误并在 `catch` 块中捕获相同的错误。在 Haskell 中,我们也有相同的函数来捕获运行时错误。
`try` 函数的函数定义如下所示:“`try :: Exception e => IO a -> IO (Either e a)`”。请看下面的示例代码。它演示了如何捕获“除以零”异常。
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