[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

13.6 関数ファイル

単純な1回完結のプログラムを除き,必要なときに毎回,必要とするすべての関数 を定義しなければならないことは実用的ではありません。かわりに,通常は それらをファイルに保存しておきたいと思うでしょう。そうすれば,簡単に編集 することができ,後で使うために保存しておくことができます。

Octaveは,使用前にファイルから関数定義を読み込む必要はありません。Octaveが 発見できる場所にファイルを置いておき,単に関数定義名を入力する必要があるだ けです。

Octaveが未定義の識別子に遭遇すると,すでにコンパイルされて現時点でシンボ ルテーブルに掲載されている変数または関数を最初に探します。もし,ここで その定義を見つけられなかったならば,未定義の識別子と同じベース名をもち, `.m'で終わるファイルを,組み込み変数LOADPATHによって指定され たディレクトリのリストから検索します。(4)一度Octaveがマッチする ファイルを見つけると,ファイルの中身を読み込みます。もし,そのファイルに 1個の関数が定義されているならば,その関数がコンパイルされて実行さ れます。ある単一のファイルに複数の関数を定義するにはどうするのか,につい てさらなる情報はスクリプトファイルを参照してください。

Octaveが関数ファイルから関数を定義するときには,それを読み込んだファイル の完全な名前とタイムスタンプをを保存します。その後,その関数が必要になっ たときに毎回,そのファイルのタイムスタンプをチェックします。もしタイム スタンプが,最後に読み込んだ時間以降に変更されたことを示すならば,Octave は再度そのファイルを読み込みます。

タイムスタンプをチェックすることにより,Octaveの実行中に,関数の定義を編 集することができるようになり,Octaveセッションを再起動することなく,新た な関数定義を自動的に使用できます。ある関数を使用するたびにタイムスタンプ をチェックすることは非効率ですが,正しい関数定義を使用できるようにするた めに必要なのです。

変更されていないと思われる関数のタイムスタンプをチェックすることによる パフォーマンスの悪化を避けるために,Octaveは,ディレクトリ `octave-home/share/octave/version/m' に存在する関数ファイルは変更されないと仮定します。ですから,それらのファ イルで定義されている関数を使用するたびにチェックは行われません。これは, 普通は非常によい仮定であり,Octaveとともに配布される関数ファイルについて パフォーマンスを有意に向上させます。

もしOctaveを実行しているあいだに,自作の関数ファイルが変更されないことが 分かっているならば,変数ignore_function_time_stamp"all" とセットすることにより,パフォーマンスを向上させることができます。この 変数に"system"をセットすると,標準の挙動になります。もしこれ以外 の何かの値をセットするならば,Octaveは全ての関数ファイルについてタイム スタンプをチェックするようになります。

Built-in Variable: DEFAULT_LOADPATH

関数ファイルを検索するディレクトリを,コロンで区切って並べたもの。この 変数の値は,組み込み変数LOADPATHに現れた先頭,末尾あるいは二重の コロンへと自動的に代入される。

Built-in Variable: LOADPATH

関数ファイルを検索するディレクトリを,コロンで区切って並べたもの。詳細は 関数とスクリプトファイルを参照せよ。LOADPATHの値は,環境変数 OCTAVE_PATHを上書きする。これについてはInstalling Octaveを参照の こと。

LOADPATHは,TeXがTEXINPUTSを処理するのと同じ要領で処理 される。LOADPATHの先頭,末尾あるいは二重に出現するコロンは, DEFAULT_LOADPATHの値で置き換えられる。LOADPATHの初期値は ":"である。これは,DEFAULT_LOADPATHによって指定された ディレクトリを検索するようOctaveに伝えるものである。

さらに,いずれかのパス項目が`//'で終わっているならば,そのディレク トリと,それに含まれる全てのサブディレクトリに対して関数ファイルを再帰的に 検索する。これにより,Octaveが関数を最初に検索するときに,LOADPATH内 で発見したファイルのリストをキャッシュしておくため,わずかに遅くなる。 その後,Octaveはファイルの内部キャッシュを検索するだけなので,通常は より高速に検索する。

再帰的ディレクトリ検索のパフォーマンスを向上させるために,再帰的に検索され る各ディレクトリについて,追加的なサブディレクトリあるいは関数ファ イルのどちらか片方を含め,両者を混ぜないのが最善である。

Octaveとともに配布される関数ファイルディレクトリの説明は, Octaveとともに配布される関数の構成を参照せよ。

Built-in Function: rehash ()

Octaveのディレクトリキャッシュを再初期化する。

Built-in Function: file_in_loadpath (file)
Built-in Function: file_in_loadpath (file, "all")

LOADPATHによって指定されたディレクトリのリストの中に,fileが 見つかるならば,fileの絶対名を返す。もしファイルが何も見つからない ならば,空行列を返す。

もし最初の引数が文字列のセル配列ならば,セル配列の要素について LOADPATHの各ディレクトリを検索し,マッチした最初のファイル名を 返す。

もし2番めのオプション引数"all"を与えるならば,そのパスにおいて 同じ名前を持つ全てのファイル名のリストを含むセル配列を返す。もし何も ファイルが見つからなければ,空のセル配列を返す。

Built-in Variable: ignore_function_time_stamp

この変数は,関数ファイル内で定義された関数を検索するたびに,Octaveがシス テムコールstatを実行しないようにするために使用する。もし ignore_function_time_stamp"system"であれば,Octaveは `octave-home/lib/version'のサブディレクトリに存在する 関数ファイルを自動的に再コンパイルしないようになる。たとえ,それが最後に コンパイルされたときから変更されていたとしても,である。しかし, LOADPATHに存在するその他の関数は,変更されていれば再コンパイルさ れる。この変数に"all"をセットすると,関数定義をclearで削 除しない限り,Octaveはどの関数ファイルも再コンパイルしないようになる。 ignore_function_time_stampにそれ以外の値をセットすると,Octaveは, 関数ファイルで定義された関数を再コンパイルするかどうかを,常にチェックす るようになる。ignore_function_time_stampの初期値は"system" である。

Built-in Variable: warn_function_name_clash

もしwarn_function_name_clashの値がゼロでないならば,ある関数ファイ ル内で定義されている関数が,そのファイル名と異なることを発見したときに, 警告を発生する(もし名前が合わなければ,ファイル内で宣言した関数名は無視 される)。もしこの値が0ならば,警告を省略する。初期値は1である。

Built-in Variable: warn_future_time_stamp

もしこの変数の値がゼロでないならば,未来のタイムスタンプを持つ関数ファイル を発見したときに警告を表示する。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]

This document was generated on July, 20 2006 using texi2html 1.76.