19.5 输出函数
本节描述了和输出有关的Lisp函数,这些函数将对象转换为对应的打印表示。
部分 Emacs 打印函数会自动给给输出添加引号,以方便阅读。这些引用符号为'""和'\';它们可以区分字符串和符号,并防止字符串和符号中标点的混淆,查阅打印表示以获取完整解释。你可以传递参数,以控制是否使用引用符号。
若该文本需要再次被读回 Lisp,那你需要加上引号,以防止二义性。类似的,若该文本是用来给Lisp程序员提示的,那你也需要这么做。不过,若是为了更好的输出给普通人看,那最好不要使用引号。
Lisp 对象可以引用他们自己。打印这种自引用对象通常会陷入无限循环。Emcas 会自动检测这种递归,并使用 '#level' 来替代这样的循环引用。举个例子,这里 '#0' 表示再 0 level 层的递归引用:
下面的函数中,stream 表示一个输出流(查阅前一节查看不同输出流的描述,也可以看看 external-debugging-output,这是一个调试时很有用的流。)若 stream 为 nil 或被略去,那默认使用变量 standard-output 的值。
Function: print object &optional stream
函数 print 是比较方便的打印方法。该函数会将 object 的打印表示输出到 stream,并会在结尾额外打印一个换行符。该函数默认使用引号。该函数会返回 object。
举个例子:
Function: prin1 object &optional stream
该函数将 object 的打印表示输出到stream。该函数不会在结尾额外添加换行符,但会和 print 一样,使用引号。该函数返回 object。
Function: princ object &optional stream
该函数将object的文本表示输出到 stream,干函数返回 object。
这个函数用于生成常人可读的输出,而不是 read 可读的输出,因此这个函数并不会插入引号,也不会使用双引号将输出引起来,而且每次调用间也不会插入空格。
Function: terpri &optional stream ensure
该函数向 stream 输出 新行。其函数名表示 "terminate print"。若参数 ensure 为 non-nil,那么输出将不会作为新行。请注意,在这里,参数 stream 不能是函数,否则会抛出错误。当一个新行被打印出来后,该函数会返回 t。
Function: write-char character &optional stream
该函数将字符 character 输出到 stream。该函数返回 character。
Function: prin1-to-string object &optional noescape
这个函数返回 prin1 会打印的字符串。
若参数 noescape 为 non-nil,那么将会在输出中禁止引用符号。(这个参数在 Emacs 19 或更后的版本中提供)
查阅函数 format 在章节格式化字符串,以获取其他的将Lisp对象转换为打印表示的方法。
Macro: with-output-to-string body...
这个宏会执行 body 表达式,并将 standard-output 作为字符串输出。此宏返回该字符串。
举个例子,假设当前缓冲区的名称为 "foo"
返回 "The buffer is foo"。
Function: pp object &optional stream
此函数将object输出到stream中,和prin1 很像,但不同的是,此函数的输出会更漂亮。也就是说,该函数会自动添加缩紧,以此让输出对人更加友好。
如果你需要在批处理模式中使用二进制 I/O,举个例子,使用 本节介绍的函数将任意二进制数据,或 non-POSIX 标准下的新行符写出,请查阅 set-binary-mode章节。
最后更新于
这有帮助吗?