Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

入れ子関数と無名関数の変数

入れ子関数および無名関数に対するスコープ規則では、関数内で使用されるすべての変数はコードのテキスト内に存在しなければなりません。

無名関数、入れ子関数あるいは入れ子関数を含む関数のワークスペースに変数を動的に追加しようとすると、MATLAB® で以下のようなエラーが発生します。

Attempt to add variable to a static workspace. 

この表では、一般的な動的代入操作とそれを回避する推奨方法を説明します。

操作のタイプ

動的代入を回避するベスト プラクティス

load

変数名を関数 load の入力として指定します。または、関数 load からの出力を構造体配列に代入します。

evalevalin または assignin

可能であれば、これらの関数を使用しないようにします。関数 eval の代替方法を参照してください。

変数を作成する MATLAB スクリプトの呼び出し

スクリプトを関数に変換し、引数を使用して変数を渡します。この方法により、コードもわかりやすくなります。

MATLAB デバッガーでの変数への代入

次のようにして、変数をベース ワークスペースに代入します。

K>> assignin('base','X',myvalue)

動的代入を回避する別の方法は、変数を関数内で明示的に宣言することです。たとえば、makeX.m というスクリプトで変数 X に値を代入するとします。makeX の呼び出し "および" X の明示的宣言を行う関数は、X が関数ワークスペースにあるため、動的代入エラーを回避します。変数を宣言する一般的な方法は、その値を空の配列に初期化することです。

function noerror
X = [];
nestedfx

   function nestedfx
      makeX
   end
end

関連するトピック