gpt4 book ai didi

matlab - 在matlab中是否可以隐藏从handle类继承的方法?

转载 作者:太空宇宙 更新时间:2023-11-03 19:13:12 24 4
gpt4 key购买 nike

我正在为 MATLAB 中的超声仿真开发一个命令行应用程序。我们代码中的几乎每个对象都是 handle 的子类(作为引用传递)。我遇到的问题是,从 handle 类继承的所有方法都显示在 MATLAB 的“方法”部分下(参见下面的示例)。

我想要的是从句柄类中隐藏继承的方法,以便只有允许用户使用的函数显示在“方法”下。这样,如果用户想知道要使用哪些方法,他/她看起来就不会那么困惑。

示例测试类:

classdef Test < handle
methods
function myFunction(obj)
end
end
end

在命令行中:

T = Test()

T =

Test handle with no properties.
Methods, Events, Superclasses

点击“方法”后:

Methods for class Test:

Test delete findobj ge isvalid lt ne
addlistener eq findprop gt le myFunction notify

我想要的:

Methods for class Test:

Test myFunction

这在 MATLAB 中可行吗?

最佳答案

如果您在隐藏方法 block 中重载所有子类方法,我认为它会完全满足您的要求。

我不确定它适用于哪个版本的 Matlab,但它在 R2012b 中绝对适用于我。

异常(exception)是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

如果将上述类保存到 handle_light.m,然后在命令窗口中键入 methods handle_light,您将得到以下结果:

Methods for class handle_light:

handle_light isvalid

然后测试类变为:

classdef Test < handle_light   
methods
function myFunction(obj)
end
end
end

这样做意味着您不需要将重载放在 Test 类中,这样可以使事情更整洁。

关于matlab - 在matlab中是否可以隐藏从handle类继承的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6621850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com