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

时间:2015-07-29 18:00:48

标签: stream common-lisp sbcl

这个问题说明了一切。我想知道因为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)))))

1 个答案:

答案 0 :(得分:4)

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

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