さまざまな要素のHTMLを出力するためのメソッドをいくつか作成しています。各メソッドの出力は同じですが、必ずしも同じ入力が必要なわけではありません。
ニーズをエコーする方法も同様game-board
に取る必要がありplayer
ます(各プレイヤーは自分のピースしか見ることができないため)
(defmethod echo ((board game-board) (p player)) ... )
ボードスペースをエコーする場合、プレーヤーごとに変更する必要はありません(ディスパッチは実際には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の章といくつかのCLOSチュートリアルを読みましたが、ここで質問している状況については説明していません)。