我正在使用MATLAB中的超声波仿真命令行应用程序.我们代码中的几乎每个对象都是句柄的子类(作为引用传递).我遇到的问题是从句柄类继承的所有方法都出现在MATLAB的"方法"部分下(参见下面的例子).
我想要的是从句柄类隐藏继承的方法,以便只允许用户使用的函数显示在"方法"下.这样,如果用户想知道使用哪种方法,对用户来说看起来并不那么混乱.
示例测试类:
classdef Test < handle
methods
function myFunction(obj)
end
end
end
Run Code Online (Sandbox Code Playgroud)
在命令行中:
T = Test()
T =
Test handle with no properties.
Methods, Events, Superclasses
Run Code Online (Sandbox Code Playgroud)
点击"方法"后:
Methods for class Test:
Test delete findobj ge isvalid lt ne
addlistener eq findprop gt le myFunction notify
Run Code Online (Sandbox Code Playgroud)
我想要的是:
Methods for class Test:
Test myFunction
Run Code Online (Sandbox Code Playgroud)
这在MATLAB中是否可行?
scl*_*e81 15
如果你重载隐藏方法块中的所有子类方法,我认为它将完全符合您的要求.
我不确定哪种版本的Matlab可以使用,但它绝对适用于R2012b.
异常是isvalid因为它是密封的,因此您无法在句柄子类中覆盖它.
classdef handle_light < handle
methods(Hidden)
function lh = addlistener(varargin)
lh = addlistener@handle(varargin{:});
end
function notify(varargin)
notify@handle(varargin{:});
end
function delete(varargin)
delete@handle(varargin{:});
end
function Hmatch = findobj(varargin)
Hmatch = findobj@handle(varargin{:});
end
function p = findprop(varargin)
p = findprop@handle(varargin{:});
end
function TF = eq(varargin)
TF = eq@handle(varargin{:});
end
function TF = ne(varargin)
TF = ne@handle(varargin{:});
end
function TF = lt(varargin)
TF = lt@handle(varargin{:});
end
function TF = le(varargin)
TF = le@handle(varargin{:});
end
function TF = gt(varargin)
TF = gt@handle(varargin{:});
end
function TF = ge(varargin)
TF = ge@handle(varargin{:});
end
function TF = isvalid(varargin)
TF = isvalid@handle(varargin{:});
end
end
end
Run Code Online (Sandbox Code Playgroud)
如果将上面的类保存到handle_light.m然后methods handle_light在命令窗口中输入,将得到以下结果:
Methods for class handle_light:
handle_light isvalid
Run Code Online (Sandbox Code Playgroud)
然后Test类变为:
classdef Test < handle_light
methods
function myFunction(obj)
end
end
end
Run Code Online (Sandbox Code Playgroud)
以这种方式执行操作意味着您不需要将重载放在Test类中,从而使事情变得更整洁.