在 MATLAB中,一个类(定义在)。classdef
Sealed
例如,如果我尝试实例化一个定义如下的类(考虑table
is Sealed
):
classdef SomeLie < table
end
我会得到'MATLAB:class:sealed'
错误:
>> A = SomeLie;
Error using SomeLie
Class 'table' is Sealed and may not be used as a superclass.
因为我拒绝被机器告诉我可以做什么或不可以做什么,所以我想继承一个Sealed
class,无论如何。如何在 MATLAB R2017a 中做到这一点?
我很难相信这个系统是完全密封的,所以我正在寻找一种解决方案,它会导致该Sealed
属性被默默地忽略(或类似的东西)。所需的解决方案应该可以在不修改任何“库类定义”的情况下从中删除Sealed
。
我试着玩弄“反射”,但走到了死胡同……
classdef SomeLie % < table
properties (Access = private)
innerTable table;
end
properties (GetAccess = public)
methodHandles struct = struct();
end
methods
function slObj = SomeLie(varargin)
slObj.innerTable = table(varargin{:});
% methodHandles = methods(slObj.innerTable);
ml = ?table; ml = {ml.MethodList.Name}.';
ml = setdiff(ml,'end');
tmpStruct = struct;
for indM = 1:numel(ml)
tmpStruct.(ml{indM}) = str2func([...
'@(varargin)' ml{indM} '(slObj.innerTable,varargin{:})']);
end
slObj.methodHandles = tmpStruct;
end
function varargout = subsref(slObj,varargin)
S = struct(slObj);
varargout{:} = S.methodHandles.(varargin{1}.subs)(varargin{:});
end
end
end
(上面的代码不用修,我只是分享)