matlab 类 继承,继承MATLAB中的密封类
在MATLAB中,一個(gè)類的
attributes之一(在
classdef之后定義)是Sealed,這意味著沒有類可以將它用作超類(或者更確切地說,“表示這些類沒有被設(shè)計(jì)為支持子類. “
1).
例如,如果我嘗試實(shí)例化一個(gè)定義如下的類(考慮表是密封的):
classdef SomeLie < table
end
我會(huì)得到’MATLAB:class:sealed’錯(cuò)誤:
>> A = SomeLie;
Error using SomeLie
Class 'table' is Sealed and may not be used as a superclass.
因?yàn)槲揖芙^被機(jī)器告知我可能做什么或不做什么,所以我想繼承一個(gè)Sealed類,無論如何.我怎樣才能在MATLAB R2017a中做到這一點(diǎn)?
我很難相信這個(gè)系統(tǒng)是完全不透氣的,所以我正在尋找一種解決方案,它會(huì)導(dǎo)致Sealed屬性被忽略(或類似的東西).所需的解決方案應(yīng)該無需修改任何“庫類定義”即可從中刪除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
(沒有必要修復(fù)上面的代碼,我只是分享)
總結(jié)
以上是生活随笔為你收集整理的matlab 类 继承,继承MATLAB中的密封类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python教程程序_Python如何发
- 下一篇: java fx输出_JavaFX中具有输