ワークスペース間で値を目立たないように調整することはお勧めできません。また、バグを検出しにくくなり、コードを維持するのが難しくなります。これに対する議論は本質的にミラーarguments against global variablesです。操作したいデータを明示的に制御する方がはるかに信頼性が高くなります。はい、おそらくデータを別々に保存する必要があります。
たとえば、あなたが使用することができstructure:出力
function testcode()
mydata.a = 1;
mydata.b = 2;
mydata.c = 3;
mydata.d = 4;
mydata = multiplydata(mydata, 2);
disp(mydata)
end
function [datastruct] = multiplydata(datastruct, n)
varnames = fieldnames(datastruct);
for ii = 1:length(varnames)
datastruct.(varnames{ii}) = datastruct.(varnames{ii})*n;
end
end
:
>> testcode
a: 2
b: 4
c: 6
d: 8
これはvarargin
/varargout
を使用するよりも、実際に任意の機能的に異なるものではないが、あなたはあなたのコードを書いた場合あなたが最初から構造を利用しているような方法で、追加のアンパックステップ(例えば、x = varargin{1}
など)に対処する必要はありません。
何らかの理由で、あなたは絶対には盲目的にあなたの変数を調整しなければならない(再び、しないでくださいこれは、)、あなたはassignin
を使用することができ、場合:
function testcode()
a = 1;
b = 2;
c = 3;
d = 4;
multiplydata(2, a, b, c, d);
fprintf('a: %u\nb: %u\nc: %u\nd: %u\n', a, b, c, d)
end
function multiplydata(n, varargin)
for ii = 1:length(varargin)
varname = inputname(ii + 1);
assignin('caller', varname, varargin{ii}*n)
end
end
返す:
を
>> testcode
a: 2
b: 4
c: 6
d: 8