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 
廣告