gpt4 book ai didi

common-lisp - defgeneric 中的可选参数?

转载 作者:行者123 更新时间:2023-12-04 07:42:26 24 4
gpt4 key购买 nike

我正在编写一些方法来为各种元素发出 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 章节和 some CLOS tutorials ,但它们没有涵盖我在这里询问的情况)。

最佳答案

一般来说,如果两个函数的接口(interface)相差太大,则表明它们实际上不是同一操作的特化,不应具有相同的名称。如果您只想专注于可选/关键参数,那么实现这一目标的方法是使用一个普通函数,该函数调用一个通用函数并为其提供缺失参数的默认值以进行专门化。

Keene's book我相信,这是最全面的 CLOS 指南。不幸的是,它似乎仅以书本形式提供。

关于common-lisp - defgeneric 中的可选参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9355544/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com