module[option] - モジュールに対するオプション
使い方
option opt1, opt2, ...
options opt1, opt2, ...
パラメータ
opt1, opt2, ... - オプションのための記号または等式
|
説明
|
|
•
|
手続きの場合と同様に、モジュールでもオプションを宣言することができます。option は、モジュール定義の先頭部分において、option 宣言文を用いて宣言します。この宣言は、option (options も同義)というキーワードで始まり、1つまたはそれ以上のオプションを表す式列がそれに続きます。各オプション opti は、記号、または左辺が記号になっている等式のいずれかである必要があります。
|
•
|
システムにとって意味不明の option は無視されます。これはモジュール作成者独自の目的に合わせてオプションを利用できるということです;オプションは属性と同等になり、属性と同様にアクセス可能となります。
|
•
|
手続きとモジュールの両方に対して意味のある標準的なオプションは、trace と copyright のオプションだけです。特に、オプション remember, system, arrow, operator, inline はモジュールにとっては意味の無いオプションです。
|
•
|
モジュールについて、事前に意味の定義されているオプションが4つだけ存在します。その1つはモジュールの初期化オプションであり、 load = pname という形式で与えられます。ここで pname は、そのモジュールで宣言されているエクスポート変数や局所変数の中にある手続きの名前です。このオプションが示されている場合、そのモジュールが Maple 倉庫から読み込まれた時に、指定された手続きが使われます。
|
•
|
unload = pname オプションは、そのモジュールが破棄される場合に呼び出される、局所変数またはエクスポートされた手続きの名前を指定します。モジュールが破棄されるのは、それに対するアクセスが不可能となり不要なメモリとして回収の対象になった場合か、Maple を終了する場合です。
|
|
モジュールがもはやアクセス不可能となり、unload= 「手続き」 が実行される前に不要なメモリとして回収対象となっても、その手続きを実行しているうちに再びアクセス可能になることもあります。この場合には、モジュールは不要なメモリとして回収の対象にはなりません。 実際に回収の対象として処理されたか、Maple を終了した場合には、unload= 「手続き」を再度実行することはありません。
|
•
|
load= 「手続き」と unload= 「手続き」を使う場合には、引数は不要です。
|
•
|
この2つのオプションを正しく実行するためには、これらを含むモジュール全体を倉庫に保存しておく必要があります( load= や unload= のオプションを使っているモジュール内のメンバーを保存していても、そのモジュール自体を保存していない場合には、指定された手続きは使われることは無いでしょう)。
|
•
|
事前に意味の定義されているモジュールオプションの3つめは、オプション package です。オプション package を用いたモジュールは、システムに Maple のパッケージを表すものとして理解されます。オプション package を用いて作成されたモジュールは、自動的に保護されたエクスポート変数を持ちます。
|
•
|
最後のオプション record は、レコードの識別に使用されます。レコードは、 Record コンストラクタによって作られ、モジュールを用いて表現されます。
|
|
|
例
|
|
>
|
u := module() export e; local l; option `Copyright (C) Maplesoft, a division of Waterloo Maple Inc. 2003`; end module:
v := module() export e; local l; end module:
interface( 'verboseproc' = 1 ):
print( u );
|
| (2.1) |
| (2.2) |
次のモジュールは、倉庫から読み込まれた時に、startup という手続きを呼び出すことで初期化されます。モジュールが不要なメモリとして回収の対象になった時か、Maple を終了した場合には、shutdown という手続きが実行されます。
>
|
P := module()
export e;
local T, startup;
option load = startup, unload = shutdown;
e := proc( n::posint )
if assigned( T[ n ] ) then
T[ n ]
else
int( expr, x )
end if
end proc;
startup := proc( )
# store common values
local i, expr;
global x;
for i from 1 to 100 do
expr := sin( n * x ) * cos( n * x );
T[ expr, x ] := int( expr, x )
end do
end proc:
shutdown := proc( )
# print a message
printf("Module P is going away\n");
end proc:
end module:
|
Warning, `shutdown` is implicitly declared local to module
`P`
| |
このモジュールでは、エクスポートが自動的に保護されます。
>
|
m := module() option package; export e; end;
|
| (2.3) |
>
|
type( m:-e, 'protected' );
|
| (2.4) |
package オプションがない時には、モジュールのエクスポートは保護されません。
>
|
m := module() export e; end;
|
| (2.5) |
>
|
type( m:-e, 'protected' );
|
| (2.6) |
|
|
Download Help Document
Was this information helpful?