2011-07-26 2 views
3

のループでグローバル変数を宣言し、それをループ内MATLABでグローバル変数を宣言することは可能です:は、MATLAB

cellvar = { 'ni' ; 'equity' ; 'assets' } ; 
for i = 1:size(cellvar,1) 
    global cellvar{1} % --> THIS GIVES AN ERROR 
end 

% Desired result: 
global ni 
global equity 
global assets 

MATLABドキュメントは言う:「グローバルコマンドのno関数形が(つまり、することはできませんありませんかっこを使用して変数名を引用してください)。 "任意の回避策を提案しますか?ありがとう!

+5

**絶対変数と 'eval'の使用は避けてください。 – nibot

+0

ニボットにはポイントがあります。私はおそらくあなたがしようとしていることをやるより良い方法があると思います。 – gnovice

答えて

6

あなたがこれを行うにEVAL機能を使用することができます。GLOBALは、変数名のコマンドラインリストを受け入れているので、あなたにあなたの変数名を連結するSPRINTFを使用してforループを避けることができ、また

for var = 1:numel(cellvar) 
    eval(['global ' cellvar{var}]); 
end 

を1つの文字列を評価する:

eval(['global' sprintf(' %s',cellvar{:})]);