Il est fortement déconseillé d'ajuster aveuglément les valeurs sur les espaces de travail et cela peut entraîner des bogues difficiles à détecter et rendre le code difficile à maintenir. Arguments contre cela essentiellement miroir arguments against global variables. Il sera beaucoup plus fiable de contrôler explicitement les données que vous voulez manipuler. Oui, cela vous demandera probablement de stocker vos données différemment.
Par exemple, vous pouvez utiliser un 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
qui délivre en sortie:
>> testcode
a: 2
b: 4
c: 6
d: 8
Ce n'est pas vraiment fonctionnel différent que d'utiliser varargin
/varargout
, mais si vous écrivez votre code de telle manière que vous utilisiez des structures depuis le début, vous n'avez pas à gérer l'étape supplémentaire de déballage (par exemple, x = varargin{1}
, etc.).
Si, pour une raison quelconque, vous devez absolument doit ajuster aveuglément vos variables (qui, encore une fois, s'il vous plaît ne pas), vous pouvez utiliser 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
qui retourne:
>> testcode
a: 2
b: 4
c: 6
d: 8