我在写一个存文件的操作,在最后使用print函数,但是内容太多,每次打印会使slime报出“内容过多”而断开连接。我发现是我在存储时所使用的print函数,导致大文件中的内容被打印出来。请问如何只保存文件而不打印的方法。
(defun save-image-data (&optional (file "test"))
(with-open-file (out file
:direction :output
:if-exists :supersede)
(print (png-read:image-data *png-object*) out)))
不知道为什么要用 print,如果只是要返回数据,或者要输出到标准输出,大概可以用 format
format 也会在 REPL上打印吧? 有什么办法不打印呢?
format 可以把第一个参数设成 nil。
具体的记得不是很清楚了。
CL 的 format 和它在 emacs lisp 的用法是完全不一样的。各种意义上。
我记得在emacs-lisp中,print提供了第三个参数,可以自定义print的输出流。
比如:
(defun var_dump (v)
(let ((s ""))
(print
v
'(lambda (c)
(setq s (concat s (char-to-string c)))))
s))
(var_dump '(1 2 (3 4)))
上面的代码通过重定义第三个参数,将print的输出导入到了字符串s中。
这是emacs-lisp的写法,我不清楚cl行不行。。。。
不懂 Common Lisp,但你的函数的返回值看起来是文件的内容,因此你自己需要注意避免让 REPL 直接执行它,不然内容太多的话,REPL 出现问题并不奇怪。
问题已经解决:
使用format函数可以避免输出在REPL中谢谢 各位