export - エクスポート変数宣言
使い方
export e1, e2, ...;
パラメータ
e1, e2, ... - エクスポート変数として用いる1個以上の変数名、型名
|
説明
|
|
•
|
モジュール定義における export 句は、そのモジュールが実装された後でありさえすればクライアントからアクセス可能な、1個以上の変数を「宣言」するために用います。変数名は、そのモジュール外部ではメンバー選択演算子 :- を使ってアクセスします。このような変数をそのモジュールの「エクスポート変数」と呼びます。式 e1, e2, ... のそれぞれは、記号、あるいは、sysymbol::type の形の式のいずれかである必要があります。 後者の場合、宣言は、エクスポートに割り当てられた値の型にも影響します。
|
•
|
モジュールのエクスポート変数に関して最も重要なことは、そのモジュールに対しては局所変数として機能するということです。エクスポート変数名の通用する範囲は、そのモジュールの局所変数のそれと完全に一致します。大きな違いは、そのモジュールが実装された後であっても、エクスポート変数を「見る」ことができるという点にあります。
|
•
|
モジュールのエクスポート変数の評価規則は、モジュールの局所変数のそれと同じであり、手続きの局所変数の評価規則とも同じです(詳細については eval を参照して下さい)。
|
•
|
モジュールのエクスポート変数の集合は固定されたものであり、そのモジュール定義が評価されるのと同時にセットされます。いったん実装されたモジュールのエクスポート変数の集合は変更不可能です。
|
•
|
エクスポート変数名は明示的に宣言する必要が有ります。暗黙の通用規則によって、変数名がエクスポート変数として解釈されることは無いのです。
|
•
|
モジュール m のエクスポート変数 s に、 m の中にあるモジュールを割り当てることができます(すなわち、s は m の部分モジュールなのです)。部分モジュール s のエクスポート変数は、m の部分モジュール s を m:-s により指定した後に、s の適当なエクスポート変数 e を m:-s:-e として選択することにより、アクセス可能になります。
|
|
|
例
|
|
いくつかのエクスポート変数を宣言します。
>
|
m:= module() export a, b, c; option package; end module;
|
| (2.1) |
演算子 :- を使って変数をアクセスします。
| (2.2) |
>
|
evalb( a = m:-a ); # not the same name
|
| (2.3) |
| (2.4) |
| (2.5) |
| (2.6) |
| (2.7) |
| (2.8) |
エクスポート変数が可視的かどうかは、ある意味で「遷移的」です。
>
|
m := module()
export s, p;
s := module()
export e;
e := 2
end module;
p := proc()
s:-e
end proc
end module:
m:-s:-e;
|
| (2.9) |
| (2.10) |
変数 s が m のエクスポート変数か、変数 e が s のエクスポート変数でないと、うまく動きません。
>
|
m := module()
export p;
local s;
s := module()
export e;
e := 2
end module;
p := proc()
s:-e
end proc
end module:
m:-s:-e;
|
Error, module does not export `s`
| |
| (2.11) |
ここでは、変数 e は m の本体の中でさえ利用することができません。
>
|
m := module()
export p;
local s;
s := module()
local e;
e := 2
end module;
p := proc()
s:-e # error, not an export of s
end proc
end module:
m:-s:-e;
|
Error, module does not export `s`
| |
Error, (in p) module does not export `e`
| |
|
|
Download Help Document
Was this information helpful?