我有这个
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之外添加函数,则这些函数可以工作,但是我不确定这是否是一种好习惯,为什么我可以方法部分中没有测试功能。
答案 0 :(得分:2)
有几种解决方法。
通常,私有函数位于methods (Access = private)
块中。有时,也可以将它们设置为静态(如果有道理)。私有方法也可以放在a separate folder中。
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
如果这些函数仅由构造函数使用,则可以将它们设为nested:
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的mentioned一样,您也可以将函数放在classdef
块之后:
classdef what
...
end
function tf = Test1(varargin)
end
以上建议应该可以解决您的问题。现在,还有其他评论:
what
命名可能不是一个好主意,因为这是builtin MATLAB function的名称。private
方法块设置为Hidden
,但是通常不需要“隐藏” private
方法,因为这些方法在外部不可见。还是上课。