11.11.8 スクリプトファイル
スクリプト ファイルは、(ほぼ) あらゆる Octave コマンドのシーケンスを含むファイルです。スクリプト ファイルは、Octave プロンプトで各コマンドを入力した場合と同じように読み込まれ、評価され、論理的には関数内に属さないコマンドのシーケンスを実行する便利な方法を提供します。
関数ファイルとは異なり、スクリプト ファイルはキーワードで始まってはなりませんfunction。キーワードで始まっている場合、Octave はそれを関数ファイルであると想定し、定義されるとすぐに評価される単一の関数を定義していると想定します。
スクリプト ファイルは、スクリプト ファイルで指定された変数がローカル変数ではなく、コマンド ラインで表示される他の変数と同じスコープ内にあるという点でも関数ファイルと異なります。
スクリプト ファイルがfunction キーワードで始まっていなくても、1 つのスクリプト ファイルで複数の関数を定義し、それらすべてを一度にロード (実行はしない) することができます。これを行うには、ファイル内の最初のトークン (コメントやその他の空白は無視) が 以外である必要がありますfunction。評価する他のステートメントがない場合は、次のように効果のないステートメントを使用できます。
Prevent Octave from thinking that this is a function file:
1;
Define function one:
function one () ...
Octave にこれらの関数を読み込ませて内部形式にコンパイルさせるには、ファイルが Octave のロード パス (path関数を通じてアクセス可能) にあることを確認してから、コマンドを含むファイルの基本名を入力するだけです。(Octave は、関数ファイルを検索する場合と同じルールを使用してスクリプト ファイルを検索します。)
ファイル内の最初のトークン(コメントは無視)が の場合function、Octave は関数をコンパイルして実行しようとし、関数定義の後に表示される空白以外の文字に関する警告メッセージを出力します。
Octave は、評価が必要になるまで識別子の定義を検索しないことに注意してください。これは、スクリプトファイル内またはコマンドラインで入力された次のステートメントをコンパイルすることを意味します。
not a function file:
1; function foo () do_something (); endfunction function do_something () do_something_else (); endfunction
関数do_somethingが関数内で参照される前に定義されていない場合でもfoo、これはエラーではありません。関数が実際に評価されるまで、Octave は関数によって参照されるすべてのシンボルを解決する必要がないため、これはエラーではありません。
Octaveは定義が必要になるまで検索しないので、次のコードは常に「バー = 3' コマンドラインで直接入力されたか、スクリプトファイルから読み込まれたか、関数本体の一部であるかに関係なく、関数またはスクリプトファイル
eval ("bar = 3");
bar
関数本体内にこのようなコードがあると、関数がコンパイルされるときに定義が解決された場合、Octave を騙す可能性があります。このコードを一貫した方法で評価できるほど Octave を賢くすることは、事実上不可能です。パーサーはevalコンパイル時に呼び出しを実行できなければなりませんが、評価される文字列内のすべての参照も解決できない限りそれは不可能であり、それを要求すると制限が厳しすぎます (文字列はユーザー入力から取得されるか、関数が評価されるまでわからないものに依存する可能性があります)。
Octaveは通常、名前がファイル.m、関数を使用してsource任意のファイルからコマンドを実行できます。
: source (file)
: source (file, context)
Parse and execute the contents of file.
ファイルの内容を解析して実行します。
コンテキストを指定しない場合、これはスクリプトファイルからコマンドを実行するのと同じですが、ファイル名を指定する必要はありません。 ファイル.mまたは実行パス上にある必要があります。
スクリプトは、現在のコンテキストではなく、現在の関数を呼び出した関数のコンテキスト ( "caller") または最上位のコンテキスト ( "base") のいずれかで実行される場合があります。
参照: run。
See also: run.
Publish Octave Script Files
Publishing Markup
Jupyter Notebooks