9 評価
通常、式を評価するには、Octave プロンプトで式を入力するか、ファイルに保存したコマンドを Octave に解釈させます。
場合によっては、計算されて文字列に格納された式を評価する必要があることがありますが、これはまさにこの eval関数で実行できます。
: eval (try)
: eval (try, catch)
文字列を解析し、Octave プログラムであるかのように評価してみます 。
実行が失敗した場合は、オプションの文字列catch を評価します。
文字列tryは現在のコンテキストで評価されるため、結果はeval返された後も引き続き使用できます。
次の例では、現在のワークスペースにおおよその値 3.1416 を持つ 変数Aを作成します。
評価("A = acos(-1);");
tryの評価中にエラーが発生した場合は 、次の例に示すように catch 文字列が評価され ます。
eval ('error ("This is a bad example");',
'printf ("This error occurred:\n%s\n", lasterr ());');
-| This error occurred:
This is a bad example
プログラミング ノート:eval任意のコード文字列の実行ではなく、エラー キャプチャ メカニズムとしてのみ使用している場合は、代わりに try/catch ブロックまたは unwind_protect/unwind_protect_cleanup ブロックの使用を検討してください。これらの手法はパフォーマンスが高く、任意のコードの評価で発生するセキュリティ上の考慮事項は発生しません。
See also: evalin, evalc, assignin, feval.
このevalc関数は、評価された式によって生成されたコンソール出力もキャプチャします。
: s = evalc (try)
: s = evalc (try, catch)
文字列try をOctave プログラムであるかのように解析して評価し、出力を戻り変数sにキャプチャします。
実行が失敗した場合は、オプションの文字列catch を評価します。
この関数は のように動作しますevalが、通常はコンソールに書き込まれる出力や警告メッセージはすべてキャプチャされ、文字列sで返されます。
diaryこの関数の実行中は は無効になります。 を使用すると 、関数自体systemによって出力 がキャプチャされない限り、外部プログラムによって生成された出力はキャプチャされませんsystem 。
s = evalc ("t = 42"), t
⇒ s = t = 42
⇒ t = 42
See also: eval, diary.
Calling a Function by its Name
Evaluation in a Different Context