これは私には何度も起こります。私はクラスを定義し、それがfuncallableか、Gtkウィジェットクラスであることを忘れてしまい、メタクラスを記述する必要があります。しかし、それが定義されると、SBCLは(たとえこのクラスのインスタンスがなくても)私にメタクラスを変更させません。例えば、クラスのメタクラスを変更するには
(defclass foo()
((slot-a)))
を評価して、メタクラスを追加し、再評価:エラーで
(defclass foo()
((slot-a))
(:metaclass gobject:gobject-class))
結果:
Cannot CHANGE-CLASS objects into CLASS metaobjects.
[Condition of type SB-PCL::METAOBJECT-INITIALIZATION-VIOLATION]
See also:
The Art of the Metaobject Protocol, CLASS [:initialization]
残念ながら、私はアートのコピーを持っていませんそれが何であるかを確認するためにメタオブジェクトプロトコルの今のところ私が把握できる唯一の方法は、lispを再起動することです。これはかなり混乱することがあります。
すぐにエラーが発生するので、定義したクラスを完全に削除しても構いません。質問:
- クラスのインスタンスを作成した場合、それらを無効にしてGCedを取得する方法はありますか?
- クラスを削除するには?機能のためには
fmakunbound
のようなものです。私は本を読んで、あなたがオンラインでいくつかの情報を見つけることができるお勧めしていても