本章描述了 OCaml 核心库,它由内置类型和异常的声明组成,以及提供这些内置类型基本操作的 Stdlib 模块。 Stdlib 模块在以下两个方面很特殊
以下内置类型和预定义异常始终在编译环境中定义,但不是任何模块的一部分。因此,它们只能通过其短名称来引用。
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 是格式参数的类型, 'f 是 printf 风格函数的结果类型, 'b 是传递给 %a 和 %t 打印函数的第一个参数的类型(请参阅 Printf 模块), 'c 是这些函数的结果类型,也是传递给 kprintf 风格函数的第一个参数的类型, 'd 是 scanf 风格函数的结果类型(请参阅 Scanf 模块), 'e 是 scanf 风格函数的接收器函数的类型。
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 节。)参数是源代码中定义的位置(文件名、行号、列号)。