実を言うと、僕は第3章で1つ嘘をついていました。--Clackのアプリケーションはただの関数です。-- 正直に言えば、アプリケーションは必ずしも関数ではありません。以下の例を見てください。
;; 分かりやすさのためにシンボルをimportしておきます (import '(clack:call clack:)) (defclass <sample-app> (<component>) ()) (defmethod call ((this <sample-app>) env) (declare (ignore env)) '(200 (:content-type "text/plain") ("Hello, Clack!"))) (clack:clackup (make-instance '<sample-app>))
前に見たものととても似ていませんか? 関数の中身はメソッドcallに移動し、clackupには<sample-app>のインスタンスを渡しています。
まとめるなら、clackupはアプリケーションとして、関数か、<component>のサブクラスのインスタンスを受け取ることができます。すべてのコンポーネントには、リクエストごとに呼び出されるメソッドcallがある必要があります。
まだ、これをどのように扱えばいいのかわからないかもしれませんが、実例は後ほど取り上げます。ここではただ、clackupにCLOSインスタンスも渡せる、ということだけ覚えておいてください。