gauche.reload
- モジュールの再ロード ¶開発のサイクルのなかで、モジュールを再ロードしなければならないことは 頻繁におこります。このモジュールはそれを支援するものです。
プログラムのいくつかの部分のセマンティクスはモジュールのロードの順に 依存します。それで、任意のモジュールを再ロードすることはプログラムの ふるまいを予期せぬものに変えてしまう可能性があります。このモジュールは 自分がなにをしようとしているか判っている開発者向けのものです。
再定義ルール: モジュールを再ロードすると、デフォルトでは、その モジュール内のすべての束縛はリセットされます。 しかしながら、場合によってこれは望ましいことではありません。たとえば、 中間結果をある変数に残したままにしておきたい場合です。 再ロード手続きにどの束縛を保存するかを決めるためのルールを指定することが できます。
このルールは以下の構文で記述します。
<module-rules> : (<module-rule> ...) <module-rule> : (<module-pattern> <rule> ...) <module-pattern> : a symbol module name, or a symbol containing glob pattern <rule> : procedure | symbol | regexp | (and <rule> ...) | (or <rule> ...) | (not <rule>)
<module-rules>
はモジュールごとのルールをきめるグローバルルール
です。<module-pattern>
はモジュール名シンボルまたは(mylib.*
のような)グロブパターンを含むシンボルのどちらかです。<rule>
が
手続きであれば、述語として使われ、この述語を満す値の束縛は再定義から
保護されます。<rule>
がシンボルであれば、それと同じ名前の
変数の束縛は保護されます。<rule>
が正規表現の場合、この正規表現に
マッチする名前の変数は保護されます。
再定義からの保護機構は、場当たり的なもので、セマンティクスとしても
不透明なものであることに注意してください。特にdefine
の右辺式は
評価されてしまうので、そこで起きる副作用は効果を持ちます (例えば
define-class
はクラスの再定義を行ってしまいます)。
これは利便のためだけのものだと考えて下さい。
正確な振舞いを知りたければ、コードを見てください。
{gauche.reload
}
指定されたモジュールを再ロードします。オプションで
rule … をつかって再定義ルールを指定することができます。
ここで、それぞれの rule は上の <rule>
で定義されたものです。
{gauche.reload
}
前回ロードしたときより変更のあったモジュールを再ロードします。
オプション引数 module-rules が与えられていれば、再ロードした
モジュールに適用する再定義ルールを決定するために使います。
module-rulesが省略された場合、現在のルールが適用されます。
デフォルトの現在のルールは空です。現在のルールは
module-reload-rules
をつかって設定できます。
{gauche.reload
}
これは一種の「パラメータ」(パラメータ参照)で、
reload-modified-modules
に対応するデフォルトのモジュールルールを
保持しています。引数なしで呼ばれたときには、現在のモジュールルールを
返します。module-rulesとともに呼ばれたきにはその引数を
現在のモジュールルールにします。
{gauche.reload
}
これは再ロード手続きのメッセージ出力レベルを制御するパラメータです。
引数なしで呼ばれると現在の出力レベルフラグを返します。flagと
ともに呼ばれると現在の出力レベルをこれに設定します。