问题标签 [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 回答
105 浏览

oop - 第一个参数为零时无法调用方法?

image-rectangle并且carpet是结构。

当这个方法被这样调用时:

我得到一个:

它是这样的吗?也许有一些方法可以让它接受nil作为一个论点?我将如何指定只有类型nilcarpet适用的参数?

0 投票
1 回答
329 浏览

common-lisp - 将对象打印为唯一字符串,可能使用其地址

我需要一种从 CLOS 对象创建 GraphViz 节点名称的方法,这样每个对象都有自己的节点,如果我更改我的对象并重新创建 GraphViz 可视化,我会为保留的对象获得相同的节点名称(参考) 相同。

如果我只是尝试打印我的对象,我会得到几乎很好的东西(因为我从来没有PRINT-OBJECT为我的班级覆盖):

有没有办法将那1002D22C81部分作为字符串?然后我可以N1002D22C81从中创建 GraphViz 节点名称。

或者我应该(format nil "~A" obj)通过抓住 之间的部分来处理结果作为字符串{}

0 投票
2 回答
2486 浏览

lisp - What's the equivalent of constructors in CLOS?

How would you express the following Java code in Lisp?

In Lisp, is make-instance or initialize-instance the equivalent of a constructor? If yes, how do you call the super class constructor(s)?

0 投票
1 回答
512 浏览

methods - CLOS中“标准方法组合”和“简单方法组合”的区别

我一直在研究 Common Lisp Object Protocol (CLOS),但遇到了一个疑问。

有人知道CLOS中的“标准方法组合”和“简单方法组合”是什么意思吗?

在“简单方法组合”中,“列表”方法组合意味着什么?

0 投票
1 回答
397 浏览

process - lisp,CLOS:向进程类添加一个槽

我的程序出现多线程错误,因此我想扩展 with-lock-grabbed 宏以跟踪进程获取的锁堆栈。我想通过简单地添加一个槽来处理来存储锁堆栈来做到这一点。

不幸的是,我不明白如何在运行时添加一个插槽而不破坏已经存在的内容。ensure-class 完全重新定义了类。我不想要这个,因为我不知道其他插槽进程已经有什么。

如何添加插槽?特别是,我想添加这两个插槽:

0 投票
2 回答
352 浏览

locking - lisp,CLOS:向锁类添加一个槽

我正在尝试向锁类添加一个新插槽。这很有用,因为我在层次结构中有很多锁,如果我为每个锁存储父锁,则在调试时更容易检测问题。

不幸的是,这显然不能用 ensure-class 函数来完成。我可以将插槽添加到“进程”,但不能添加到“锁定”,因为它被列为内置类。请参阅我之前的问题,了解如何为“进程: lisp,CLOS:向进程类添加插槽”

你知道如何解决这个问题吗?如果不可能,我能想到的唯一选择是将锁的层次关系存储在哈希表中,但是由于某些锁是在运行时和不同进程中创建的,所以我必须再添加一个锁访问在锁上存储元数据的哈希表。

这让我觉得效率非常低。你有更好的主意吗?

编辑:为澄清起见,我使用的是 Clozure Common Lisp。

0 投票
1 回答
2938 浏览

common-lisp - common lisp:defstruct 结构的槽值

在常见的 lisp 中,我可以使用什么来使用插槽名称/符号访问结构插槽?

我想要的是

我正在使用 clozure cl,并且在 clozure cl 中这有效。但是,AFAIK 这是非标准行为(相当于“未定义行为”C++)。我不打算切换到另一个 CL 实现,所以我应该继续使用 slot-valuefor 结构,还是有更好的方法来做到这一点?

0 投票
1 回答
433 浏览

common-lisp - CLOS:我在这里做什么,在元类中设置一个槽?

https://gist.github.com/PuercoPop/5850773

0 投票
1 回答
184 浏览

common-lisp - 从配置文件创建类实例的惯用方式

编辑:我已经重组了这个问题,所以它(希望)更容易回答。我是 CL 的新手,所以当我什至不确定描述它的最佳方式是什么时,有时很难描述我正在尝试做的事情:P

在过去的几周里,我一直在学习一些 Common Lisp,并且想知道在给定配置文件的情况下创建对象实例的最佳方法,该配置文件定义了类的一些插槽值,但这些值需要以某种形式进行规范化在他们被分配之前。

因此,举个简单的例子,如果我有以下课程:

我想要一种在外部文件中指定的方法,比如说instance-a.lisp

但是在构造实例时,必须首先以某种方式对值 x 进行归一化。最终调用make-instance看起来像这样:

其中(name-value-from-config)“A”和 (x-value-from-config) 将是 5。 注意:这两种形式仅用于占位符,以指示应使用配置中的值构造它。

我最初的想法是将配置文件中的任何内容转换为具有适当键的哈希表或 plist。

0 投票
2 回答
103 浏览

types - 将 nil 视为通配符类型

我正在编写一个 Lisp 程序,并试图对类型有点认真。我想有性能改进,但我对使用类型注释来记录和安全更感兴趣。问题是nil。到目前为止,我遇到了两个问题。

展品 A:

展品 B:

这里的最佳做法是什么?到目前为止,我唯一有远见的想法是使用空对象模式并拥有(defclass nil-quux-class (quux-class) ...)and (defclass nil-foo-component (foo-component) ...),但这似乎充其量是 hacky。我不知道为什么,但确实如此。坦率地说,我不习惯在 CLOS 中设计模式变通方法 :)