以前は、ミューテーターを次のように実装しましたが、作業中の再帰OOアルゴリズムでは非常にゆっくりと実行されました。これは、関数呼び出しごとにオブジェクトを複製していたためである可能性があります...これは正しいですか?
%% Example Only
obj2 = tripleAllPoints(obj1)
obj.pts = obj.pts * 3;
obj2 = obj1
end
次に、出力オブジェクトを使用せずにミューテーターを実装しようとしました...しかし、MATLABではこれを実行できないようです-スコープの問題のために変更が「固定」されませんか?
%% Example Only
tripleAllPoints(obj1)
obj1.pts = obj1.pts * 3;
end
アプリケーションの目的で、私のコードの非常に単純化されたバージョン(OOと再帰を使用)を以下に示します。
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