我有兩個包中都定義了一個類。第二個類繼承了第一個類,但有一個同名的插槽。其目的確實是爲了覆蓋插槽。禁止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)))
SBCL給出了一個有益的警示,當我做的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)
實例既然是預期的行爲,我可以抑制警告這樣的:
(handler-bind (#+SBCL (style-warning #'muffle-warning))
(make-instance 'bar))
不過我希望bar
類的用戶能夠在沒有得到警告的情況下創建實例。
我可以在前面的代碼塊中編寫一個包含代碼的包裝函數,但是可以在不消除所有樣式警告的情況下提前調用(make-instance 'bar)
來取消警告?
如果您打算覆蓋插槽,則必須從其他軟件包導入名稱(或使用軟件包限定名稱)。現在,你有兩個插槽,'FOO :: S'和'BAR :: S'。 – jkiiski
@jkiiski Doh!好,趕快,謝謝。 – user3414663
這正是警告的內容;-) –