gpt4 book ai didi

common-lisp - 使用 CLOS 类实例作为哈希表键?

转载 作者:行者123 更新时间:2023-12-04 13:13:11 25 4
gpt4 key购买 nike

我有以下类(class):

(defclass category ()
((cat-channel-name
:accessor cat-channel-name :initarg :cat-channel-name :initform "" :type string
:documentation "Name of the channel of this category")
(cat-min
:accessor cat-min :initarg :min :initform 0 :type number
:documentation "Mininum value of category")
(cat-max
:accessor cat-max :initarg :max :initform 1 :type number
:documentation "Maximum value of category"))
(:documentation "A category"))

现在,我想使用这个类作为哈希表的键。实例的地址可以很容易地与 eq 进行比较.然而,问题是,这个 category 可能有多个相同的实例。 class 并且我希望哈希表也将其识别为键。

所以,我试图覆盖 :test make-hash-table的论据像这样的功能:
(make-hash-table :test #'(lambda (a b) (and (equal (cat-channel-name a) (cat-channel-name b))
(eq (cat-min a) (cat-min b))
(eq (cat-max a) (cat-max b)))

不幸的是,这是不允许的。 :test需要是函数 eq、eql、equal 或 equalp 之一的指示符。

解决这个问题的一种方法是打开类 category进入一个结构,但我需要它是一个类。有什么办法可以解决这个问题吗?

最佳答案

许多 Common Lisp 实现提供了对 ANSI Common Lisp 标准的扩展,以支持不同的测试和散列函数(以及更多)。

CL-CUSTOM-HASH-TABLE是一个兼容层。

关于common-lisp - 使用 CLOS 类实例作为哈希表键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33828408/

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