Function EXPORT

UP


Function EXPORT

Function EXPORT

構文

export symbols &optional package => t

引数と戻り値

symbols - シンボルのリストの指定子
package - パッケージ指定子。デフォルトは現在のパッケージ。

定義

exportはひとつか複数のシンボルを package(直接か間接によってか)内で そのpackageの外部シンボルとしてアクセス可能にします。

もしあるsymbolsがすでにpackageの外部シンボルとしてアクセス可能であるとき、 exportはそのシンボルに対して何の効果も持ちません。 もしsymbolpackage内に内部シンボルとして存在するときは、 それは単純に外部の状態に変更されます。 もしそれがuse-packageを経由して内部シンボルとして アクセス可能であるときは、それは最初にそのpackage内でimportされ、 それからexportされます (symbolは、継承元のsymbolがそのpackageで 使い続けるかどうかに関わらず、packageに存在されます)。

exportは、packageuseしている全てのパッケージで 各symbolをアクセス可能な状態にします。 そのような全てのパッケージは、名前の衝突チェックが行われます。 チェックは(export s p)が実行されたとき、 (package-used-by-list p)で得られる各パッケージqに対して (find-symbol (symbol-name s) q)で確認します。 通常の場合、exportpackageの初期定義のときに行われるため、 package-used-by-listの結果はnilであり 名前の衝突チェックは無視できることに注意してください。

複数の変更が行われるとき、 例えばexportにシンボルのリストが与えられたとき、 実装がそれぞれの変更を別々に処理することが許されます。 そのため、リストの最初のsymbol以外によって引き起こされる 名前の衝突から中止しても、 リストの最初symbolunexportすることはありません。 しかし、あるsymbolexportによる名前衝突エラーで中断しても、 そのsymbolはあるパッケージからはアクセス可能で、 他のパッケージからはアクセス不能になるようなことはありません。 処理されるsymbolのそれぞれについて、 exportはアトミック操作のように動作します。

exportの名前の衝突が、 exportされるsymbolsのひとつと 新たにexportされるシンボルを継承するpackageに すでに存在しているシンボルとの間に生じるとき、 その衝突は、exportされるシンボルを選びもう片方をuninternするか、 あるいはすでに存在しているシンボルを選び、 それをshadowing-symbolにするか どちらかで解決できます。

例文

(make-package 'temp :use nil) =>  #<PACKAGE "TEMP">
(use-package 'temp) =>  T
(intern "TEMP-SYM" 'temp) =>  TEMP::TEMP-SYM, NIL
(find-symbol "TEMP-SYM") =>  NIL, NIL
(export (find-symbol "TEMP-SYM" 'temp) 'temp) =>  T
(find-symbol "TEMP-SYM") =>  TEMP-SYM, :INHERITED

副作用

パッケージシステムは変更されます。

影響

アクセス可能なシンボル

例外

もしsymbolsのどれかがpackage内でアクセス不可のとき、 型package-errorのエラーが通知されますが、 これは修正可能であることが許されており、 ユーザーは対話式でシンボルをimportするべきかどうかを指定できます。

参考

import, unexport, 11.1. パッケージの説明

備考

なし。


TOP, Github