I have the following 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"))
Now, I would like to use this class as a key for a hash-table. The addresses of instances can be easily compared with eq
. The problem is however, there might be multiple identical instances of this category
class and I would like the hash-table to recognize this as a key as well.
So, I was trying to overwrite the :test
argument of the make-hash-table
function like this:
(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)))
Unfortunately, this is not allowed. :test
needs to be a designator for one of the functions eq, eql, equal, or equalp.
One way to solve this would be to turn the class category
into a struct, but I need it to be a class. Is there any way I can solve this?