我正在编写一些方法来为各种元素发出 HTML。每种方法都有相同的输出,但不一定需要相同的输入。
呼应a的方法也game-board
需要采取a 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教程,但它们没有涵盖我在这里询问的情况)。