>我有这个
classdef what
properties ( ... )
...
end
methods (Access=public)
...
end
methods
function obj = what(...) ... end % constructor
function test = Test1() ... end
function test = Test2() ... end
end
构造函数中有很多约束,因此当我创建what
时,如果不满足条件,它将失败,通过调用Test1
和Test2
来测试约束。
我也将测试函数存储在方法下,我希望将它们隐藏起来,这样它们就不会显示在classdef
之外。 但是我被抛出了一个错误Test1
和Test2
.
我希望这些Test
函数是private
的,hidden
的,并且只与这个类相关,但我也希望在使用方法中找到的构造函数时它是可调用的,我的问题是:存储这些函数的"正确"位置和方法是什么。
我目前在使用构造函数时遇到错误,但是,如果我在 classdef 之外的页面底部添加函数,那么函数就可以工作,但我不确定这是否是好的做法以及为什么我不能在方法部分拥有测试函数。
有几种方法可以解决这个问题。
-
通常,私有函数放置在
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
-
如果这些函数仅由构造函数使用,则可以将它们嵌套:
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
-
正如 Cris 提到的,你也可以把函数放在
classdef
块之后:classdef what ... end function tf = Test1(varargin) end
上面的建议应该可以解决您的问题。现在有一些其他评论:
- 将你的类命名为
what
可能不是一个愚蠢的想法,因为这是一个内置的MATLAB函数的名称。 - 虽然可以设置一个
private
方法块Hidden
,但通常不需要这样做来"隐藏"private
方法,因为这些方法在类之外是不可见的。 - 我个人建议坚持一定的命名约定(例如Pascal或Java((这是指小写的类名,而不是大写的"Test"方法(。
- 如果你对 MATLAB OOP 相当陌生,你可能想阅读有关句柄类的信息。