CL-USER> (progn
(format t "abc~%")
(format t "~&abc"))
abc
abc
NIL
CL-USER>
我的猜测是:ostream 描述符总是存储发送给它的最新字符。
说,在 ostream 收到一个
#\a
之后,FORMAT
可以确定 ostream 是 not 开头因为发送给它的最新字符是#\a
.
但我不确定情况是否如此。
~&
只是调用fresh-line
,所以问题实际上是fresh-line
是怎么知道的,答案是
如果您查看可用源代码的各种实现,您可能会发现它们执行此操作的各种方式。例如,SBCL 有一个
fd-stream
对象(在 src/code/fd-stream.lisp
中),它跟踪 output-column
。但是实现如何做到这一点,以及他们是否这样做,完全取决于他们。