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

bak*_*tad 12 matlab

我正在使用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类中,从而使事情变得更整洁.


Jon*_*nas 10

有一个解决方案在这里,包括示例代码.

简而言之,您需要做的是重载Matlab的内置函数methods,以便在类上调用它时,它会handle从输出中删除方法.确保它适用于其他所有内容,但这样您就不会弄乱用户的其他代码.例如,如果不使用@foldername变量来存储类,则可以将其放入private目录中.

  • 以下是WaybackMachine页面的旧档案:http://web.archive.org/web/20120103154712/http://www.tim.cz/en/nfaq/matlab-simulink/tab-completion.php (3认同)