私は様々な要素に対してHTMLを発行するいくつかのメソッドを書いています。各メソッドは同じ出力を持ちますが、必ずしも同じ入力が必要なわけではありません。defgenericの任意の引数?
(各プレイヤーは唯一、自分の作品を見ているので)その発送は実際にある(プレーヤーごとに変更する必要はありません、ボード・スペースをエコー
(defmethod echo ((board game-board) (p player)) ...)
同様player
を取るためにgame-board
ニーズをエコーする方法game-board
メソッドで行われます。後でスペースのecho
が呼び出されます)。理想的には、私は
(defmethod echo ((space board-space)) ...)
(defmethod echo ((space empty-space)) ...)
それは私が後できちんと自分自身を表示するためには、単にプレイヤーよりも多くを知っている必要がありますオブジェクトに実行することも考えだ行うことができると思います。エラー
The generic function #<STANDARD-GENERIC-FUNCTION ECHO (4)> takes 2 required arguments;
を与えるだろうけれども、同じジェネリックに特化した方法は、すでに存在しているので、それは戻って、これらの方法echo-space
、echo-board
などに名前を付けることが理想的とは言えそうです。
特殊なオブジェクトに基づいて他の引数を変更する正規の方法はありますか?私は
(defgeneric echo (thing &key player ...) ...)
または
(defgeneric echo (thing &rest other-args) ...)
のような何かをするべきか?より一般的に言えば、具体的にdefgeneric
に関するまともなチュートリアルを教えてもらえますか? (関連するPCLの章とsome CLOS tutorialsを読んだことがありますが、私がここで質問している状況は含まれていません)。
ジェネリックにファンクションディスパッチすることは、(エコーボード/エコースペース/等の領域に)戻ってしまうのではないかと思われます。私はあなたがこの場合に正しいと思います。エコー(単なるアイテムを出力する)と、別のエコーテイラー(echo-tailored)または同様のもの(追加のパラメータに基づいて出力を変更する)のようなものを定義する方が良いかもしれません。 – Inaimathi
非ジェネリック関数はディスパッチを行わず、単に引数を正規化します。これは明らかにジェネリック(とメソッド)がすべての引数をとることを必要とします。なぜなら、これはインターフェイスが実際に似ている場合にのみ有用な理由です。 – Ramarren
ここにはKeeneの本のPDFがあります(私はこの法律の有効性について知らないので、助言してください):https://doc.lagout.org/programmation/Lisp/Object-Oriented%20Programming%20in%20Common%20Lisp_% 20A%20プログラマー%27s%20ガイド%20to%20CLOS%20%5BKeene%201989-01-11%5D.pdf –