それぞれにクラスが定義された2つのパッケージがあります。 2番目のクラスは最初のクラスを継承しますが、同じ名前のスロットを持ちます。実際にスロットを無効にする意図があります。sbclのmake-instanceでのスタイル警告を抑制する
(defpackage :foo
(:use :cl)
(:export foo))
(in-package :foo)
(defclass foo() ((s)))
(defpackage :bar
(:use :cl :foo)
(:export bar))
(in-package :bar)
(defclass bar (foo) ((s)))
私はbar
(make-instance 'bar)
STYLE-WARNING:
slot names with the same SYMBOL-NAME but different SYMBOL-PACKAGE (possible
package problem) for class #<STANDARD-CLASS BAR:BAR>:
(FOO::S BAR::S)
のインスタンスを作るときSBCLは、それが意図した動作であるので、私はこのようなことの警告を抑制することができる有用な警告を与える:
(handler-bind (#+SBCL (style-warning #'muffle-warning))
(make-instance 'bar))
しかし、私は、 bar
クラスのユーザーは、警告を受け取らずにインスタンスを作成できるようになります。
前のコードブロックにコードを含むラッパー関数を書き込むことができましたが、すべてのスタイル警告を消さずに(make-instance 'bar)
を呼び出す前に警告を抑制することは可能ですか?
スロットを無効にする場合は、他のパッケージから名前をインポートするか、パッケージ修飾名を使用する必要があります。つまり、 'FOO :: S'と' BAR :: S'の2つのスロットがあります。 – jkiiski
@jkiiski Doh!良いキャッチ、ありがとう。 – user3414663
これはまさにその警告に関するものです;-) –