Ich habe die folgende Klasse:CLOS-Klasseninstanzen als Hash-Tabellenschlüssel verwenden?
(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"))
Nun würde Ich mag diese Klasse als Schlüssel für eine Hash-Tabelle verwenden. Die Adressen von Instanzen können leicht mit verglichen werden. Das Problem ist jedoch, dass es mehrere identische Instanzen dieser category
Klasse geben könnte und ich möchte, dass die Hash-Tabelle dies auch als Schlüssel erkennt.
Also, ich versuche, das :test
Argument der make-hash-table
Funktion wie diese zu überschreiben:
(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)))
Leider ist dies nicht erlaubt ist. :test
muss ein Bezeichner für eine der Funktionen eq, eql, equal oder equalp sein.
Eine Möglichkeit, dies zu lösen, wäre die Klasse category
in eine Struktur zu verwandeln, aber ich brauche es eine Klasse zu sein. Kann ich das irgendwie lösen?
Warum brauchen Sie eine Klasse? – coredump
Möchten Sie * Instanzen * als Schlüssel oder die Klasse selbst verwenden? –