% Function IMPORT
Function IMPORT
import
symbols &optional
package => t
symbols - シンボルのリストの指定子
package - パッケージ指定子。デフォルトは現在のパッケージ。
import
は、symbolかsymbolsをpackageの内部に追加し、
存在するシンボルに対して、packageに現れているか、
それにアクセス可能かという点について
名前の衝突チェックを行います。
いったんsymbolsがimport
されると、
それらはLispリーダーを使うときにimport
されたpackage内では
パッケージの接頭辞を使うことなく参照できます。
import
を行おうとしたときに
import
されるsymbolと
他のpackageから継承されたシンボルの間で
名前の衝突が生じたとき、
それはimport
されるsymbolを選び
それをshadowing
シンボルにするか、
あるいはすでにアクセス可能なシンボルを選び
import
を実行しないかのどちらかで解決できます。
import
を行おうとしたときに
packageの内部にシンボルがすでに表れていたため
名前の衝突が生じたときは、
そのシンボルをunintern
するか、
あるいはimport
を実行しないかのどちらかで解決できます。
import
されるシンボルは、現在のパッケージから
自動的にはexport
されませんが、
しかしそれがすでに外部として存在しているときは、
それが外部であることが変更されることはありません。
もしimport
されるどんなシンボルでも
ホームパッケージを持ってなかったら
(つまり(symbol-package symbol) => nil
)、
import
はそのsymbolのホームパッケージをpackageにセットします。
もしsymbolがすでにimport
しようとしているpackageに存在しているときは、
import
は何も効果がありません。
(import 'common-lisp::car (make-package 'temp :use nil)) => T
(find-symbol "CAR" 'temp) => CAR, :INTERNAL
(find-symbol "CDR" 'temp) => NIL, NIL
(import 'editor:buffer)
というフォームは、
EDITOR
というパッケージ内にあるBUFFER
という名前の外部のシンボル
(このシンボルはそのフォームを
Lispリーダーによって読み込んだときに配置される)
を受け取り、
現在のパッケージに内部シンボルとして追加します。
その結果、このシンボルbuffer
は現在のパッケージに現れるようになります。
パッケージシステムは変更されます。
パッケージシステムの現在の状態。
もしimport
されるどのsymbolsも、
package内のアクセス可能な別のシンボル(eql
判定による)と
同じ名前であったとき(string=
判定による)、
それがpackageのshadowing
シンボルとの衝突であったとしても、
import
は型package-error
の修正可能なエラーを通知します。
なし。