19.3 输入函数
本节介绍了和读取有关的一些 Lisp 函数及变量。
在以下的函数中,stream 表示一个输入流(详情查阅前一节)。如果 stream 为 nil 或被 略去,那么会默认将其设置为变量 standard-input 的值。
如果读取中出现 未结束的 列表,向量,或字符串,则会抛出 end-of-file 错误。
Function: read &optional stream
该函数从stream中读取一个Lisp表达式的文本表示,并返回对应的Lisp对象。这是最基础的Lisp输入函数。
Function:read-from-string string &optional start end
该函数从字符串string中读取一个Lisp表达式的文本表示。该函数返回一个点对,其CAR为读取的表达式,其CDR为一个整数,该整数指明了下一个待读取字符的位置。
如果提供了参数 start,那么将会读取 start 后的字符串(其中第一个字符的索引为0)。如果你提供了参数 end,那么将会强制 Lisp 在end位置停止读取,就好像end之后啥都没有。
举个例子:
Variable: standard-input
这个变量指明了默认的输入流。当 read 的stream参数为nil时,会默认使用该变量的值作为数据流。该变量的默认值为 t,也就是使用 minibuffer。
Variable: read-circle
若该变量为 non-nil,那么读取函数将支持循环结构和共享结构。详情查阅循环对象。其默认值为 t。
在批处理模式下,当向 Emacs 进程的 标准输入/输出流 读取或输出时,有时需要确保将逐字读取/写入任何任意二进制数据,执行或不执行换行符与 CR-LF 对之间的转换。在 POSIX 标准下并不存在这样的问题,但在 MS-Windows 和 MS-DOS 下会存在这样的问题。下面的函数允许你控制Emacs进程中任何标准流的 I/O模式。
Function: set-binary-mode stream mode
将流切换到 二进制 或 文本 模式。若参数mode 为 non-nil,则切换到二进制模式,否则切换到文本模式。参数stream的值可以为 stdin,stdout 或 stderr。这个参数会刷新接下来读取或输出的模式,并返回更改前的模式。在 POSIX 标准下,该函数始终返回 non-nil 值,并仅刷新流读取模式。
最后更新于
这有帮助吗?