本节描述与读取操作相关的 Lisp 函数和变量。
在以下函数中,stream(stream)代表输入流(参见
上一节)。如果 stream 为 nil 或被省略,则默认使用
standard-input 的值。
若读取操作遇到未终止的列表、向量或字符串,会触发 end-of-file 错误。
该函数从 stream 读取一个文本形式的 Lisp 表达式,并将其作为 Lisp 对象返回。 这是基础的 Lisp 输入函数。
该函数从 string 中的文本读取第一个文本形式的 Lisp 表达式。 它返回一个 cons 单元,其 CAR 是该表达式,CDR 是一个整数, 表示字符串中剩余下一个字符的位置(即第一个未被读取的字符)。
若提供了 start 参数,则从字符串的索引 start 处开始读取 (第一个字符的索引为 0)。若指定了 end 参数,则读取操作会强制在该索引之前停止, 如同字符串的剩余部分不存在一样。
例如:
(read-from-string "(setq x 55) (setq y 5)")
⇒ ((setq x 55) . 11)
(read-from-string "\"A short string\"")
⇒ ("A short string" . 16)
;; Read starting at the first character.
(read-from-string "(list 112)" 0)
⇒ ((list 112) . 10)
;; Read starting at the second character.
(read-from-string "(list 112)" 1)
⇒ (list . 5)
;; Read starting at the seventh character, ;; and stopping at the ninth. (read-from-string "(list 112)" 6 8) ⇒ (11 . 8)
该函数像 read 一样从 stream 读取一个文本表达式,
但会额外将读取到的符号定位到其在 stream 中出现的位置。
出于效率考虑,仅符号 nil 不会被定位。
See 带位置信息的符号。
该函数由字节编译器(byte compiler)使用。
该变量保存默认输入流——当 stream 参数为 nil 时,
read 函数会使用此流。其默认值为 t,表示使用迷你缓冲区(minibuffer)。
若该变量值非 nil,则启用对循环结构(circular structures)
和共享结构(shared structures)的读取功能。See 循环对象的读取语法。
其默认值为 t。
在批处理模式下对 Emacs 进程的标准输入/输出流进行读写时, 有时需要确保任意二进制数据都能被原样读写,且/或不执行换行符与 CR-LF 对之间的转换。 此问题仅存在于 MS-Windows 和 MS-DOS 系统,POSIX 主机无此问题。 以下函数允许你控制 Emacs 进程任意标准流的 I/O 模式。
将 stream 切换为二进制或文本 I/O 模式。
若 mode 非 nil,则切换为二进制模式,否则切换为文本模式。
stream 的取值可以是 stdin、stdout 或 stderr。
该函数会作为副作用刷新 stream 中所有待输出的数据,
并返回 stream 之前的 I/O 模式值。
在 POSIX 主机上,该函数始终返回非 nil 值,且除了刷新待输出数据外不执行任何操作。