第 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:最初打开的模块