这个问题说明了一切。我想知道因为make-string-input-stream
的{{3}}没有指定,示例代码也没有显示结束。但是扩展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)))))
答案 0 :(得分:4)
如果在重新使用变量之前不关闭它,垃圾收集器会负责清理它。由于字符串输入流不会产生任何副作用,CLOSE
不会执行任何必要的操作。
输出流会有所不同,因为关闭流可能是副作用所必需的,例如刷新缓冲输出的最后一位(尽管你也可以自己调用FORCE-OUTPUT
or FINISH-OUTPUT
)。