根据 Xach 的说明,我已经使用 quickproject 建立了一个 hunchentoot 项目。In-package 在文件顶部运行,hunchentoot 在文件后面启动。REPL 也切换到我的包中,但很明显 hunchentoot 没有在我的包中运行。这会导致 REPL 和浏览器中的测试之间存在一些差异。例如,有一个函数在 alist 中查找一些东西,但是 hunchentoot 从中获取 NIL,因为它使用了另一个包中的符号。
我从这个相关问题的答案中知道,我可以将每一段用于实习符号的代码包装成类似的东西
(let ((*package* (find-package :package-name)))
...)
这将*package*
在所附代码的持续时间内将 var 设置为正确的包。
把它放在每一个需要它的功能中,我感觉就像一个凌乱的黑客。
直觉说我应该可以像这样开始 hunchentoot:
(let ((*package* (find-package :package-name)))
(hunchentoot:start (make-instance 'hunchentoot:easy-acceptor :port 4242)))
这样它就可以*package*
设置为我喜欢的值来运行它,从而确保通过来自网络服务器的调用完成的任何实习都在我的包中完成。它不起作用。Hunchentoot 最终在 cl-user 下实习,可能是由于使用了上面链接中的 WITH-STANDARD-IO-SYNTAX 之类的宏。
即使我可以说服 hunchentoot 做我想做的事,我的“乱七八糟的黑客”仍然是更好的做法吗?