问题标签 [clos]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
217 浏览

class - 是否可以在现有类中动态添加一个超类

在 Common-Lisp CLOS 中

是否可以在现有类中动态添加一个超类。

更新:

我想定义defassoc类型的宏,它将使用相同的参数将某些行为与方法/函数相关联

例如

扩大到

在这里确保何时调用 (gname (s (g group)) 应该调用相应的任务到组

我用了这个宏

但问题是它会覆盖

(如果有的话,我可以验证它是否有,)

但我希望它适用于任何对象,无论它是否具有覆盖该方法

因此,基本上应该需要更改该类和方法中的任何内容的代码。

因此,我决定动态添加父类以在其上定义此方法的一种方法。

其他方式可能是defadvidefwrapper但它不存在于 SBCL 中。

0 投票
3 回答
3529 浏览

string - Lisp:如何覆盖 CLOS 类的默认字符串表示?

在 Common Lisp 中,如何覆盖 CLOS 类的默认字符串表示形式,以便调用formatprinc打印可理解的内容,即使该类的对象嵌入到其他类型(例如列表或数组)中?

例如,如果我(format t "~a~%" x)在 x 持有我的解决方案类的实例时调用,我希望它打印类似#<SOLUTION genes: #(1 2 3) scores: #(4 5) rank: 6>而不是#<SOLUTION {BB7CD31}>.

到目前为止,我已经设法弄清楚的是编写自定义函数来处理我知道将包含此类实例的打印结构,但这很乏味。肯定 Lisp 提供了一些免费获得此功能的方法吗?

0 投票
1 回答
338 浏览

common-lisp - CLOS 是 Common Lisp 的弱点吗?

我的意思是如果 CLOS 对 Lisp 函数式编程方式来说是一种不好的做法?

0 投票
2 回答
954 浏览

lisp - CLOS 中 (:before/:after) 方法调用的顺序?

我需要一些帮助来理解以下代码的执行顺序。

我使用以下内容创建了一个实例pie

我知道 lisp 执行从最具体到最不具体的函数。但是,它看起来不像在(defmethod cook ((p pie))被调用之后被遵循。

我会假设 (defmethod cook :after ((f food))&(defmethod cook :after ((p pie))以相反的顺序执行,因为我们的实例是pie,而不是父类,food

谢谢,任何输入将不胜感激。

输出如:

0 投票
2 回答
620 浏览

lisp - GNU clisp:禁止有关不适用方法的警告消息

除了警告消息外,此代码可以按我的意愿工作。在 GNU Common Lisp 中,如何在不抑制其他可能警告消息的情况下抑制该消息?

编辑以回应Vatine的友好回复:

我试过了,情况从警告升级为致命错误:

0 投票
2 回答
182 浏览

lisp - 删除重复项时将槽值指定为键

下面的代码做我想要的:

但是有没有办法做到这一点而不必在第 13 行编写函数?是否有一种速记方法可以将类实例中的插槽值指定为键?

当然,以下内容会出现语法错误,但它给出了我正在寻找的大致概念。

0 投票
3 回答
3355 浏览

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

我正在编写一些方法来为各种元素发出 HTML。每种方法都有相同的输出,但不一定需要相同的输入。

呼应a的方法也game-board需要采取a player(因为每个玩家只看到自己的棋子)

回显棋盘空间不需要更改每个玩家(该调度实际上是在game-board方法中完成的,该方法稍后会调用echo空间)。理想情况下,我可以做到

还可以想象,我后来遇到了一个对象,该对象需要了解的不仅仅是玩家,才能正确显示自己。但是,由于已经有专门针对相同泛型的方法,因此会出现错误

返回并命名这些方法似乎不太理想echo-spaceecho-board依此类推。

是否有一种基于专门对象改变其他参数的规范方法?我应该做类似的事情吗

或者

? 更一般地说,任何人都可以指出我具体的体面教程defgeneric吗?(我已经阅读了相关的 PCL 章节和一些CLOS教程,但它们没有涵盖我在这里询问的情况)。

0 投票
1 回答
244 浏览

lisp - 如何在lisp中找到一个类的包?

假设我想找出一个类是在哪个包中定义的,例如说 (defclass x ()()) 是在 p1 中定义的。一种方法是通过 (symbol-package 'x) 获取包。这个解决方案的问题是 x 被导出到不同的包 p2 中。还有其他建议吗?

0 投票
1 回答
1634 浏览

common-lisp - Common Lisp:如何检查插槽是否已绑定?(关闭)

假设我们有一个没有 :initform 的插槽

如何检查 foo 实例的插槽 x 是否已绑定?

有一种方法可以用 MOP 做到这一点,我觉得这很丑陋。有没有更简单的方法?

我宁愿求助于:

并检查它是否为 nil - 在这种情况下 x 可能永远不会是 nil (模棱两可)。

0 投票
2 回答
1176 浏览

common-lisp - 如何为给定类的子类专门化泛型函数

我如何专门化一个通用函数来获取指定给定类的子类的符号。例如:

CLOS可以进行这种调度吗?如果是,我应该写什么而不是“子类”?