以前,我按如下方式实现了 mutators,但是它在我正在研究的递归 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