2017-01-04 5 views

答えて

5

ああは、あなたの問題を解決するために何の非破壊的な方法はありません:「シャドウイング」は、あなたが「光源」の間に「何か」(temp-pack::and)(cl:and)、あなたは(文字列を見ているスポットを持っていることを意味し"AND" ):

(let ((*package* (find-package '#:temp-pack))) 
    (read-from-string "AND")) 
=> TEMP-PACK::AND, 3 

唯一の方法は、光を遮る障害物を取り除くことです。

shadow からの変形例が有益でなければなりません:

(package-shadowing-symbols (make-package '#:temp-pack)) 
=> NIL 
(find-symbol "AND" '#:temp-pack) 
=> AND, :INHERITED 
(shadow "AND" '#:temp-pack) 
=> T 
(find-symbol "AND" '#:temp-pack) 
=> TEMP-PACK::AND, :INTERNAL 
(package-shadowing-symbols '#:temp-pack) 
=> (TEMP-PACK::AND) 
(find-all-symbols "AND") 
=> (:AND AND TEMP-PACK::AND) 
(unintern 'temp-pack::and '#:temp-pack) 
=> T 
(find-all-symbols "AND") 
=> (:AND AND) 
(package-shadowing-symbols '#:temp-pack) 
=> NIL 

限り、それがそこに抑留されたとして、それはCL:ANDをシャドウイングされますので、あなたが実際にuninternANDTEMP-PACKからする必要があります。

また、シンボルを保存するトリックがない仕事ん:名前が記号が同じであれば

intern新しいシンボルを作成しますので、これは

(shadow "AND" '#:temp-pack) 
=> T 
(defparameter temp-pack-and 'temp-pack::and) 
=> TEMP-PACK-AND 
(unintern 'temp-pack::and '#:temp-pack) 
=> T 
(shadow "AND" '#:temp-pack) 
=> T 
temp-pack-and 
=> #:AND 
(eq temp-pack-and 'temp-pack::and) 
=> NIL 

です文字列はパッケージ内ですでにアクセス可能であるため、返されます。そのようなシンボルがパッケージ内でアクセスできない場合は、指定された名前の新しいシンボルが作成され、パッケージに内部シンボルとして入力されます。

関連する問題