我想在我的一个类中重载
例如:
一个解决方法是将其实现为重载:
size()
函数,使其不返回对象的大小,而是返回特定成员的大小。问题是Matlab在类构造函数中调用obj.size以确定对象数组的大小。例如:
classdef dataClass < handle
properties
memberVar
end
methods
function obj = dataClass(mvIn)
if nargin ~= 0
if ~ismatrix(mvIn)
error('Input must be a matrix');
end
obj.memberVar = mvIn;
end
end
function sz = size(obj, varargin)
h = @(x)builtin('size', x, varargin{:});
sz = cell2mat(cellfun(h, {obj.memberVar}', 'uni', 0));
end
end
end
无法工作是因为对象数组的大小被设置成与memberVar相同的大小。
a = dataClass(ones(100))
a =
100x100 dataClass array with properties:
memberVar: [100x100 double]
一个解决方法是将其实现为重载:
function sz = size(obj, varargin)
idx = strcmpi(varargin, 'mv');
if any(idx)
varargin = varargin(~idx);
h = @(x)builtin('size', x, varargin{:});
sz = cell2mat(cellfun(h, {obj.memberVar}', 'uni', 0));
else
sz = builtin('size', obj, varargin{:});
end
end
我想调用size()
函数来获取对象的大小,但是带上'mv'参数会失去这个函数重载的意义,因为我希望像处理其他对象一样调用size()
函数。
有什么建议吗?
size
... - scmg