私は次のクラスを持っています:
(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
クラスの同一のインスタンスが複数存在する可能性があることです。ハッシュ テーブルにこれもキーとして認識させたいと考えています。
だから、私はこのように関数の: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 のいずれかの指定子である必要があります。
これを解決する 1 つの方法は、クラスcategory
を構造体に変換することですが、クラスにする必要があります。これを解決する方法はありますか?