第 28 章 核心函式庫

本章描述 OCaml 的核心函式庫,其中包含內建類型和例外的宣告,以及提供這些內建類型基本操作的 Stdlib 模組。Stdlib 模組在兩個方面很特別:

1 內建類型和預定義的例外

以下內建類型和預定義的例外始終在編譯環境中定義,但不屬於任何模組。因此,它們只能透過簡短名稱引用。

內建類型

 type int

整數的類型。
 type char

字元的類型。
 type bytes

(可寫入) 位元組序列的類型。
 type string

(唯讀) 字串的類型。
 type float

浮點數的類型。
 type bool = false | true

布林值(真值)的類型。
 type unit = ()

單位值的類型。
 type exn

例外值的類型。
 type 'a array

元素類型為 'a 的陣列的類型。
 type 'a list = [] | :: of 'a * 'a list

元素類型為 'a 的列表的類型。
type 'a option = None | Some of 'a

類型為 'a 的可選值的類型。
type int32

帶符號的 32 位元整數的類型。32 位元整數的字面值以 l 為後綴。請參閱 Int32 模組。
type int64

帶符號的 64 位元整數的類型。64 位元整數的字面值以 L 為後綴。請參閱 Int64 模組。
type nativeint

帶符號的、平台原生整數的類型(在 32 位元處理器上為 32 位元,在 64 位元處理器上為 64 位元)。原生整數的字面值以 n 為後綴。請參閱 Nativeint 模組。
type ('a, 'b, 'c, 'd, 'e, 'f) format6

格式字串的類型。'a 是格式的參數類型,'fprintf 樣式函數的結果類型,'b 是給定 %a%t 列印函數的第一個參數的類型(請參閱 Printf 模組),'c 是這些函數的結果類型,也是傳遞給 kprintf 樣式函數的第一個參數的參數類型,'dscanf 樣式函數的結果類型(請參閱 Scanf 模組),而 'escanf 樣式函數的接收器函數的類型。
type 'a lazy_t

此類型用於實作 Lazy 模組。不應直接使用。

預定義的例外

exception Match_failure of (string * int * int)

當模式匹配的任何情況都不適用時引發的例外。參數是原始程式碼中 match 關鍵字的位置(檔案名稱、行號、列號)。
exception Assert_failure of (string * int * int)

當斷言失敗時引發的例外。參數是原始程式碼中 assert 關鍵字的位置(檔案名稱、行號、列號)。
exception Invalid_argument of string

由函式庫函數引發的例外,表示給定的參數沒有意義。字串會向程式設計師提供一些資訊。一般來說,不應捕獲此例外,它表示程式設計錯誤,應修改程式碼以避免觸發此例外。
exception Failure of string

由函式庫函數引發的例外,表示它們在給定的參數上未定義。該字串旨在向程式設計師提供一些資訊;您不得對字串字面值進行模式匹配,因為它在未來版本中可能會更改(請改用 Failure _)。
exception Not_found

當找不到所需的物件時,由搜尋函數引發的例外。
exception Out_of_memory

當沒有足夠的記憶體來完成計算時,由垃圾收集器引發的例外。(對於次要堆上的分配不可靠。)
exception Stack_overflow

當評估堆疊達到最大大小時,由位元組碼直譯器引發的例外。這通常表示使用者的程式碼中有無限或過度深的遞迴。在 4.10 之前,原生程式碼編譯器並未完全實作它。
exception Sys_error of string

由輸入/輸出函數引發的例外,以報告作業系統錯誤。該字串旨在向程式設計師提供一些資訊;您不得對字串字面值進行模式匹配,因為它在未來版本中可能會更改(請改用 Sys_error _)。
exception End_of_file

由輸入函數引發的例外,表示已達到檔案結尾。
exception Division_by_zero

當整數除法和餘數運算的第二個參數為零時引發的例外。
exception Sys_blocked_io

當在非阻塞 I/O 通道上無法進行 I/O 時引發的 Sys_error 的特殊情況。
exception Undefined_recursive_module of (string * int * int)

當評估基礎不佳的遞迴模組定義時引發的例外。(請參閱第 12.2 節。)參數是原始程式碼中定義的位置(檔案名稱、行號、列號)。

2 模組 Stdlib:初始開啟的模組