我是否必须关闭使用 make-string-input-stream 创建的流

Do I have to close a stream made with make-string-input-stream

问题说明了一切。我想知道,因为 clhs for make-string-input-stream 没有指定,示例代码也没有显示结束。但是扩展 with-input-from-string 确实会关闭流。

(with-input-from-string (stream "hallo")
  )

变成

(LET ((#:STRING1525 "hallo"))
  (LET ((STREAM (MAKE-STRING-INPUT-STREAM #:STRING1525 0)))
    (MULTIPLE-VALUE-PROG1 (UNWIND-PROTECT (PROGN) (CLOSE STREAM)))))

如果您在重新使用变量之前没有关闭它,垃圾收集器将负责清理它。由于字符串输入流没有任何副作用,CLOSE 不执行任何必要的操作。

输出流会有所不同,因为可能需要关闭流以产生副作用,例如刷新缓冲输出的最后一位(尽管您也可以自己调用 FORCE-OUTPUT or FINISH-OUTPUT)。