具有约束的类def的matlab构造



>我有这个

classdef what
properties ( ... )
...
end
methods (Access=public) 
...
end
methods    
function obj = what(...) ... end % constructor   
function test = Test1() ... end    
function test = Test2() ... end
end

构造函数中有很多约束,因此当我创建what时,如果不满足条件,它将失败,通过调用Test1Test2来测试约束。

我也将测试函数存储在方法下,我希望将它们隐藏起来,这样它们就不会显示在classdef之外。 但是我被抛出了一个错误Test1Test2.

我希望这些Test函数是private的,hidden的,并且只与这个类相关,但我也希望在使用方法中找到的构造函数时它是可调用的,我的问题是:存储这些函数的"正确"位置和方法是什么

我目前在使用构造函数时遇到错误,但是,如果我在 classdef 之外的页面底部添加函数,那么函数就可以工作,但我不确定这是否是好的做法以及为什么我不能在方法部分拥有测试函数。

有几种方法可以解决这个问题。

  1. 通常,私有函数放置在methods (Access = private)块内。有时,如果这有意义的话,它们也可以成为静态的。私有方法也可以放在单独的文件夹中。

    classdef what
    methods % no properties here
    function obj = what(varargin) % constructor
    ...
    out = obj.Test1(in); % object method calling example
    ...
    end
    end
    methods (Access = private)
    function tf = Test1(varargin)
    ...
    end
    % etc ...
    end
    
  2. 如果这些函数仅由构造函数使用,则可以将它们嵌套:

    classdef what
    methods % no properties here
    function obj = what(varargin) % constructor
    ...
    out = Test1(in); % no need for "obj" here
    ...
    function tf = Test1(varargin)
    ...
    end % Test1
    end % constructor
    end % methods
    
  3. 正如 Cris 提到的,你也可以把函数放在classdef块之后:

    classdef what
    ...
    end
    function tf = Test1(varargin)
    end
    

上面的建议应该可以解决您的问题。现在有一些其他评论:

  1. 将你的类命名为what可能不是一个愚蠢的想法,因为这是一个内置的MATLAB函数的名称。
  2. 虽然可以设置一个private方法块Hidden,但通常不需要这样做来"隐藏"private方法,因为这些方法在类之外是不可见的。
  3. 我个人建议坚持一定的命名约定(例如Pascal或Java((这是指小写的类名,而不是大写的"Test"方法(。
  4. 如果你对 MATLAB OOP 相当陌生,你可能想阅读有关句柄类的信息。

相关内容

  • 没有找到相关文章

最新更新