[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Gaucheのライブラリはモジュール毎に整理されています。Gaucheはどんな形式でも、 有効なScheme式が書かれてさえいればロードすることができますが、 Gaucheのライブラリは一定の形式を保って書かれています。 Gauche用にまとまったSchemeコードを書いたら、それをモジュール形式にしておくと 再利用がしやすくなるでしょう。
通常ひとつのファイルで ひとつのモジュールを定義しますが、モジュールを複数のファイルに分けることもできます。 まずひとつのファイルでモジュールを定義する方法を説明します。 Gaucheのライブラリで使われているテンプレートは次のような形式です。
;; モジュールのインタフェースの定義 (define-module foo (use xxx) (use yyy) (export foo1 foo2 foo3) ) ;; モジュール本体 (select-module foo) … module body … ;; `require' に対応するprovide (provide "foo") |
このファイルは“foo.scm”という名で、*load-path*
にあるディレクトリの
いずれかに置かれなければなりません。
まず、define-module
フォームがモジュールfoo
を作成します。
define-module
フォーム内で、このモジュールが依存している他のモジュール
を `use
' マクロを使ってロードし、このモジュールがエクスポートするシンボルを
`export
' 構文を使って指定します。(これらの構文の詳細はモジュールの定義と選択を
参照して下さい)。
これらのuse
フォームやexport
フォームは必ずしもdefine-module
フォームの先頭に置く必要はありませんが、このようにファイルの最初の方に固めておくことで、
foo
が依存しているモジュール群やfoo
が提供するシンボル等が
一覧しやすくなります。
次の、`select-module
' フォームにより、それ以降のScheme式が
モジュールfoo
の中で評価されます。モジュールの内容を全てdefine-module
の中に
書いてしまうことも出来ますが、最後の括弧を閉じ忘れやすいことや、エディタのインデントが
狂うことなどから、あまりお薦めしません。
select-module
フォームの後には、モジュールの内容であるScheme式を自由に書けます。
それらはモジュールfoo
の中で評価されます。モジュール内で定義するトップレベルの
束縛のうち、明示的に`export'で指定されたシンボルのみが、このモジュールをインポートする他の
モジュールから見えます。
最後のprovide
は一種の定型句です。`use'がrequire-provideメカニズムを
利用しているために必要です。
これで、他のプログラムは `(use foo)
' とするだけでこのモジュールの機能が
利用可能になります。もしモジュールをサイト全体で利用できるようにしたければ、gosh
内で
(gauche-site-library-directory) |
を評価して得られるディレクトリにfoo.scm
を置いて下さい。
モジュールの名前空間のトップに新たなモジュールを追加するのに気が引ける場合は、
モジュールを階層的に構成することもできます。Gaucheのモジュールの多くは既に階層的に
構成されています。具体的なモジュール例はライブラリモジュール - 概要を参照して下さい。
例えば、text.tr
モジュールは “text/tr.scm
” ファイルに
実装されています。パス名の区切り文字`/'がモジュール名ではピリオドになることに
注意して下さい。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] |
This document was generated by Shiro Kawai on November, 22 2009 using texi2html 1.78.