assignin
指定ワークスペースの変数に値を割り当てる
説明
assignin(
は、値 ws
,var
,val
)val
をワークスペース ws
の変数 var
に割り当てます。たとえば、assignin('base','x',42)
は値 42 を MATLAB® ベース ワークスペース内の変数 x
に割り当てます。
val
の評価が必要な場合、MATLAB は ws
で指定されたワークスペース内ではなく、assignin
を呼び出す関数内で評価します。val
が関数ハンドルである場合、これは assignin
を呼び出す関数内で評価できなければなりません。
関数 assignin
は、以下のタスクで役立ちます
関数からベース ワークスペースにデータをエクスポートする。
関数の内部から、呼び出し側の関数のワークスペース内で定義された変数値を変更する。たとえば、呼び出し元の関数の引数リスト内にある変数値を変更できます。
例
関数からベース ワークスペースの変数を更新
現在の作業フォルダー内のファイルに、2 つの数値を加算する関数を作成してから、値をベース ワークスペース内の変数 fcnStatus
に割り当てます。
function c = myAdd(a,b) c = a+b; str = sprintf('%s called with %d,%d (%s)',mfilename,a,b,char(datetime)); assignin('base','fcnStatus',str) end
コマンド プロンプトで関数を呼び出します。
n = myAdd(2,3)
n = 5
関数 myAdd
がベース ワークスペース内で変数 fcnStatus
に割り当てた値を表示します。
fcnStatus
fcnStatus = 'myAdd called with 2,3 (17-Nov-2017 14:56:14)'
データをダイアログ ボックスからベース ワークスペースに保存
現在の作業フォルダー内のファイルに、名前と生年を入力するダイアログ ボックスを表示して 2050 年での年齢を計算する関数を作成します。関数 assignin
は、MATLAB ワークスペース変数 name
と age2050
に値をエクスポートします。
function mydialog prompt = {'Enter name:','Enter birth year:'}; answer = inputdlg(prompt); n = answer{1}; birthyear = str2double(answer{2}); a = 2050-birthyear; assignin('base','name',n); assignin('base','age2050',a); end
コマンド プロンプトでこの関数を実行し、データを入力して [OK] をクリックします。
mydialog
エクスポートした値をワークスペース ブラウザーで表示します。
呼び出し元の関数の変数値の変更
入力した年齢を 42 に変更する関数を作成します。localfcn
内にある assignin
の呼び出しが、メイン関数 updateAge
のワークスペース内にある a
の値を変更します。
function updateAge(a) validateattributes(a,{'numeric'},{'scalar'}) fprintf('\tYour age: %d\n',a) localfcn fprintf('\tYour updated age: %d\n',a) end function localfcn assignin('caller','a',42) end
コマンド プロンプトでこのメイン関数を呼び出します。
updateAge(37)
Your age: 37 Your updated age: 42
この例では呼び出し側ワークスペース内に変数を割り当てる方法を説明していますが、ベスト プラクティスはローカル関数 localfcn
で更新された年齢を出力引数として返すことです。
指定したワークスペース内の変数に関数ハンドルを割り当てる
現在の作業フォルダー内のファイルに、乱数の配列の最小値を検出する関数を作成します。ローカル関数 assignfh
は関数ハンドル fh
を minRand
のワークスペース内に割り当てます。関数 minRand
は入力 n
を使用して fh
を評価します。
function m = minRand(n) assignfh A = fh(n) m = min(A(:)); end function assignfh fh = @(dim)rand(dim); assignin('caller','fh',fh) end
入力値 2 を指定して関数を呼び出します。
m = minRand(2)
A = 0.3486 0.1423 0.0419 0.0766 m = 0.0419
この関数ハンドルは 2 行 2 列の乱数の配列として評価されます。
この関数の minRand2
という別のバージョンを作成します。このバージョンではローカル関数が関数ハンドルの定義内の関数 rand
をオーバーライドします。
minRand
の例と同様に、ローカル関数 assignfh2
は fh
を minRand2
のワークスペース内に割り当てます。関数 assignfh2
は rand
という名前の変数でそのワークスペース内の関数 rand
をオーバーライドし、関数ハンドルを作成します。この動作は無名関数と一致します。作成時に利用可能な変数を使用して関数ハンドルが作成されます。したがって、minRand2
で関数ハンドルを評価すると、assignfh2
で定義された配列 rand
に n
のインデックスが付けられます。
function m = minRand2(n) assignfh2(n) A = fh(n) m = min(A(:)); end function assignfh2(n) rand = 13*ones(n); fh = @(dim)rand(dim); assignin('caller','fh',fh) end
入力値 2 を指定して関数を呼び出します。
m = minRand2(2)
A = 13 m = 13
呼び出し側ワークスペースに無名関数を割り当てる場合、MATLAB は呼び出し側ワークスペース内の変数に関数ハンドルの定義を入れます。assignin
への呼び出しをもつ関数が関数ハンドルを評価します。この例では呼び出し側ワークスペースに変数を割り当てる方法を説明していますが、ベスト プラクティスはローカル関数 assignfh
で関数ハンドルを出力引数として返すことです。
入力引数
ws
— ワークスペース
'base'
| 'caller'
ワークスペース。'base'
または 'caller'
として指定します。
MATLAB ベース ワークスペース内で値を割り当てるには、'base'
を使用します。ベース ワークスペースは MATLAB コマンド プロンプトで作成した変数を保存します。これには、スクリプトがコマンド ラインまたはエディターから実行される前提で、スクリプトが作成する変数がすべて含まれます。
呼び出し側の関数のワークスペース内で変数を割り当てるには、'caller'
を使用します。呼び出し側のワークスペースは、現在実行中の関数を呼び出した関数のワークスペースです。たとえば、funA
が funB
を呼び出すと仮定します。funB
の呼び出し側のワークスペースは funA
です。したがって、assignin
を使用してワークスペースを 'caller'
として指定することで、funB
から funA
の変数に値を割り当てることができます。
メモ
呼び出し側のワークスペースの変数に割り当てることで、コードがより分かりにくくなったり、予期しない結果 (ワークスペースに予期しない変数または再定義された変数) が発生したり、パフォーマンスに悪影響を及ぼす可能性があります。ベスト プラクティスは、関数で変数を出力引数として返すことです。
ベース ワークスペースと呼び出し側のワークスペースは、以下の場合に同等になります。
コマンド プロンプトで関数を呼び出し、メイン関数が
assignin
を呼び出す場合コマンド プロンプトで
assignin
を呼び出す場合
データ型: char
| string
var
— 変数名
文字ベクトル | string スカラー
変数名。文字ベクトルまたは string スカラーとして指定します。指定したワークスペースに var
が存在しない場合、関数 assignin
によって作成されます。
データ型: char
| string
val
— 値
スカラー | 配列
変数の値。スカラーまたは配列の値として指定します。val
には任意のデータ型を指定でき、MATLAB 式を含めることができます。
変数の値を評価する必要がある場合、ws
で指定されたワークスペース内ではなく、assignin
の呼び出しを含む関数内で MATLAB は式を評価します。val
が関数ハンドルである場合、これは assignin
を呼び出す関数内で評価できなければなりません。
例: 5
例: 'hello'
例: rand(3,7)
例: @cos
ヒント
関数
assignin
は、配列の特定要素に値を割り当てません。したがって、var
は配列インデックスを含むことができません。このコードはエラーになります。X = 1:8; assignin('base','X(3:5)',-1);
配列の特定要素に値を割り当てるには、関数
evalin
を使用します。evalin('base','X(3:5) = -1')
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
入力変数
ws
はコンパイル時の定数でなければならず、ワークスペースはベース ワークスペースとして指定されていなければなりません。入力変数
val
のデータ型は、外部関数の使用に適合していなければなりません。
バージョン履歴
R2006a より前に導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)