-
Notifications
You must be signed in to change notification settings - Fork 2
ファイル分割
Snowman-s edited this page Apr 10, 2024
·
5 revisions
ファイルが肥大化すると、すべてを記述するのが大変になります。このような時、ブロックの一部を別ファイルに定義して読みだすことができます。
このような時、include
を使います。例えば、以下のファイル2つを同ディレクトリに用意し、modules_main.tr
を実行すると18を出力します。
(modules_mainの変数a
がmodules_subによって破壊されていないことに注意して下さい。このように公開する/しないものを調整できます。)
- modules_main.tr
┌───────────────────────────────────┐
│ seq │
└───┬───────┬────────────────┬──────┘
┌───┴──┐┌───┴───┐ ┌──┴──┐
│defset││include│ │print│
└┬────┬┘└───┬───┘ └──┬──┘
┌┴──┐┌┴┐┌───┴────────────┐┌──┴──────┐
│"a"││9││"modules_sub.tr"││two times│
└───┘└─┘└────────────────┘└──┬──────┘
┌──┴──┐
│ a │
└─────┘
- modules_sub.tr
┌──────────────────────────────────┐
│ seq │
└───┬───────┬──────────────────┬───┘
┌───┴──┐┌───┴──────────────┐┌──┴───┐
│defset││ defproc ││export│
└┬────┬┘└───┬──────────┬───┘└──┬───┘
┌┴──┐┌┴┐┌───┴───────┐┌─•───┐┌──┴────────┐
│"a"││0││"two times"││ * ││"two times"│
└───┘└─┘└───────────┘└┬──┬─┘└───────────┘
┌┴┐┌┴─┐
│2││$0│
└─┘└──┘
include
は、現在のソースファイルからの読み込むファイルの相対パス を受け取り、そのファイルのブロックを「置き換えたかのように」実行します。
上記の例だと、modules_main.tr
の ブロックinclude
がmodules_sub.tr
の ブロックseq
に置き換えられ、"two times"が定義されるということになります。
-
modules_sub.tr
からさらにinclude
したい場合、modules_sub.tr
からの相対パスを記述します。 -
include
はexec
と違って引数を$0
,$1
, ... にセット しません。include
はファイルの相対パスをただ一つ受け取ります。
reexport
は与えられたブロックを実行し、現在のスコープに存在する変数やプロシージャ(つまり、引数ブロックからエクスポートされたもの)を1つ上及び2つ上のスコープに定義します。include
と組み合わせることが想定されており、モジュールシステムにとって有用となります。
- チュートリアル
- アドバンスド
- その他仕様