% 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の修正可能なエラーを通知します。
なし。