我是否必须关闭使用 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
)。
问题说明了一切。我想知道,因为 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
)。