Auparavant, j'ai implémenté les mutateurs comme suit, mais il fonctionnait lentement sur un algorithme OO récursif sur lequel je travaillais, et je pensais que c'était parce que je dupliquais des objets à chaque appel de fonction ... est-ce correct?Comment créer des mutations de variable d'instance efficaces dans Matlab?
%% Example Only
obj2 = tripleAllPoints(obj1)
obj.pts = obj.pts * 3;
obj2 = obj1
end
J'ai ensuite essayé la mise en œuvre muteurs sans utiliser l'objet de sortie ... cependant, il semble que dans Matlab je ne peux pas le faire - les changements ne seront pas « coller » à cause d'un problème de portée? Pour l'application, une version extrêmement simplifiée de mon code (qui utilise OO et récursion) est ci-dessous. Pour l'application, une version extrêmement simplifiée de mon code (qui utilise OO et récursion) est ci-dessous.
classdef myslice
properties
pts % array of pts
nROW % number of rows
nDIM % number of dimensions
subs % sub-slices
end % end properties
methods
function calcSubs(obj)
obj.subs = cell(1,obj.nROW);
for i=1:obj.nROW
obj.subs{i} = myslice;
obj.subs{i}.pts = obj.pts(1:i,2:end);
end
end
function vol = calcVol(obj)
if obj.nROW == 1
obj.volume = prod(obj.pts);
else
obj.volume = 0;
calcSubs(obj);
for i=1:obj.nROW
obj.volume = obj.volume + calcVol(obj.subs{i});
end
end
end
end % end methods
end % end classdef