11.10 関数ファイル
単純なワンショット プログラムを除き、必要な関数を毎回すべて定義するのは現実的ではありません。代わりに、通常は、関数を簡単に編集して後で使用するために保存できるように、関数をファイルに保存します。
Octave では、関数定義を使用する前にファイルから読み込む必要はありません。関数定義を Octave が見つけられる場所に置くだけで済みます。
Octaveが未定義の識別子に遭遇すると、まず、すでにコンパイルされていてシンボルテーブルに現在リストされている変数または関数を探します。そこで定義が見つからない場合は、ディレクトリのリスト(パス)で末尾が .m未定義の識別子と同じ基本名を持つファイル。5 Octave が一致する名前のファイルを見つけると、そのファイルの内容が読み込まれます。単一の 関数が定義されている場合は、コンパイルされて実行されます。1つのファイルで複数の関数を定義する方法の詳細については、 スクリプト ファイルを参照してください。
Octave が関数ファイルから関数を定義すると、読み込んだファイルの完全な名前とファイルのタイムスタンプが保存されます。ファイルのタイムスタンプが変更されると、Octave はファイルを再ロードすることがあります。Octave が対話的に実行されている場合、タイムスタンプのチェックは通常、Octave がプロンプトを表示するたびに最大で 1 回行われます。現在の作業ディレクトリが変更された場合にも、新しい関数定義の検索が行われます。
タイムスタンプをチェックすると、Octave の実行中に関数の定義を編集し、Octave セッションを再起動せずに新しい関数定義を自動的に使用できるようになります。
変更される可能性が低い関数のタイムスタンプをチェックすることでパフォーマンスが不必要に低下するのを避けるために、Octaveはディレクトリツリー内の関数ファイルが オクターブホーム/share/octave/バージョン/m 変更されないため、これらのファイルで定義された関数が使用されるたびにタイムスタンプをチェックする必要がありません。これは通常、非常に良い仮定であり、Octave とともに配布される関数ファイルのパフォーマンスが大幅に向上します。
Octave の実行中に独自の関数ファイルが変更されないことがわかっている場合は、 を呼び出して、 ignore_function_time_stamp ("all")Octave がすべての関数ファイルのタイムスタンプを無視するようにすることで、パフォーマンスを向上させることができます。 "system"この関数を渡すと、デフォルトの動作がリセットされます。
: edit name
: edit field value
: value = edit ("get", field)
: value = edit ("get", "all")
名前付き関数を編集するか、エディター設定を変更します。
editファイル名または関数名を引数として呼び出すと、デフォルトのテキスト エディタで開かれます。Octave GUI のデフォルトのエディタは、環境設定の [エディタ] タブで指定します。CLI のデフォルトのエディタは、EDITOR関数によって指定します。
関数名がパス上のファイルで使用可能な場合は、そのファイルがエディターで開かれます。ファイルが見つからない場合は、 で終わる m ファイルのバリアント".m"が考慮されます。それでもファイルが見つからない場合は、先頭に が付いたバリアント"@"、先頭"@"と末尾の両方に が付いたバリアント".m"が考慮されます。
nameがコマンドライン関数の名前である 場合、その関数とその現在の定義を含む m ファイルが作成されます。
が指定されている場合はname.cc、 名前.ccパスに入力してエディタで開きます。ファイルが見つからない場合は、新しい.ccファイルが作成されます。nameが m ファイルまたはコマンドライン関数である場合、その関数のテキストが .cc ファイルにコメントとして挿入されます。
もし名前.拡張子パス上にある場合は編集され、そうでない場合はエディタが起動されます名前.拡張子現在のディレクトリにファイル名として保存します。
警告:新しい定義が使用可能になる前に、名前をクリアする必要がある場合があります。 .cc ファイルを編集している場合は、 定義が使用可能になる前に実行する必要があります。 mkoctfile name.cc
がフィールドと値のedit変数で呼び出されると、制御フィールドフィールドの値がvalueに設定されます。
出力引数が要求され、最初の入力引数が の場合、 get制御フィールドフィールドeditの値を返します 。制御フィールドが存在しない場合、edit はすべてのフィールドと値を含む構造体を返します。したがって、完全な制御構造を返します。 edit ("get", "all")
次の制御フィールドが使用されます。
‘author’
これは、新しい関数の「## Author:」フィールドの後に配置する名前です。デフォルトでは、gecosパスワード データベースのフィールドから推測されます。
‘email’
これは、作成者フィールドの名前の後にリストされる電子メール アドレスです。デフォルトでは が推測され<$LOGNAME@$HOSTNAME>、$HOSTNAME が定義されていない場合は が使用されますuname -n。おそらくこれを上書きする必要があるでしょう。必ず という形式を使用してくださいuser@host。
‘license’
‘gpl’
GNU 一般公衆利用許諾書 (デフォルト)。
'bsd'
広告条項のない BSD スタイルのライセンス。
‘pd’
パブリックドメイン。
‘"text"’
独自のデフォルトの著作権とライセンス。
' を指定しない限り日付' の場合、編集により著作権文の前に "Copyright (C) YYYY Author" が追加されます。
‘mode’
この値は、エディターを非同期モード(エディターはバックグラウンドで起動され、Octave は続行されます)で起動するか、同期モード(エディターが終了するまで Octave は待機します)"sync"で起動するかを決定します。 に設定すると、エディターは同期モードで起動します。デフォルトは"async" ( を参照system) です。
‘editinplace’
ファイルが変更可能かどうかに関係なく、その場で編集するかどうかを決定します。デフォルトは ですtrue。 に設定するとfalse、読み取り専用の関数ファイルが自動的に ' にコピーされます。家' が存在する場合は、編集時にそれを使用します。
‘home’
この値は、システム m-files をエディターで開く前にコピーするディレクトリを示します。このディレクトリもパスに含まれているため、システム関数ファイルの編集されたコピーが元のファイルの影になります。この設定は、'編集インプレース' は に設定されていますfalse。デフォルトは空の行列 ( []) で、使用されないことを意味します。以前のバージョンの Octave でのデフォルトは ~/オクターブ。
See also: EDITOR, path.
: mfilename ()
: mfilename ("fullpath")
: mfilename ("fullpathext")
現在実行中のファイルの名前を返します。
現在実行中のスクリプトまたは関数のベース名が拡張子なしで返されます。コマンド ラインなどの m ファイルの外部から呼び出された場合は、空の文字列を返します。
引数を指定すると"fullpath"、ファイル名のディレクトリ部分を含めますが、拡張子は含めません。
引数を指定すると"fullpathext"、ファイル名のディレクトリ部分と拡張子が含まれます。
See also: inputname, dbstack.
: val = ignore_function_time_stamp ()
: old_val = ignore_function_time_stamp (new_val)
関数ファイルで定義された関数を検索するたびに、Octave がファイルのタイムスタンプをチェックするかどうかを制御する内部変数を照会または設定します。
内部変数が に設定されている場合"system"、Octaveはサブディレクトリ内の関数ファイルを自動的に再コンパイルしません。 オクターブホーム/share/バージョン/m最後にコンパイルされてから変更されている場合は、検索パス内の他の関数ファイルも再コンパイルされます。
に設定すると"all"、 で定義が削除されない限り、Octave は関数ファイルを再コンパイルしませんclear。
に設定すると"none"、Octave は常にファイルのタイムスタンプをチェックして、関数ファイルで定義された関数を再コンパイルする必要があるかどうかを判断します。
Manipulating the Load Path
Subfunctions
Private Functions
Nested Functions
Overloading and Autoloading
Function Locking
Function Precedence