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*
できるようにすることで、Web サーバーからの呼び出しによって行われるすべてのインターンがパッケージ内で確実に行われるようにします。うまくいきません。Hunchentoot は、おそらく上記のリンクのように WITH-STANDARD-IO-SYNTAX のようなマクロを使用したために、cl-user の下にインターンしてしまいます。
hunchentoot を説得して自分のやりたいことをやらせることができたとしても、「乱雑なハック」を行うほうがよい理由はありますか?