matlab - 具有约束的classdef的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
它时,如果不满足条件,它会失败,通过调用Test1
and来测试约束Test2
。
我也将测试函数存储在方法下,我希望将它们隐藏起来,这样它们就不会出现在classdef
. 但我得到了一个错误Test1
and 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 的新手,您可能想了解Handle Classes。
推荐阅读
- c# - 如何在 Lua/C# 中获取 HWID?
- python - 向量化 numpy 操作
- elixir - 合并键,基于键值的值列表
- c# - 休息 API POST 方法 ||| ISSUE 异常:初始化字符串的格式不符合从索引 0 开始的规范
- c# - 无法在 ESP32 上加载 Nanoframework 固件并出现 E4000 错误
- verilog - 时钟两端的计数器变化
- swift - 单击查看 SwiftUI 时如何关闭菜单
- javascript - 从网络 json 文件显示 SectionList
- python - 如何将不同形状的多个数据框的计算过程导出到 Excel 中的一张表?
- angular - 图表中数据集数据的最大长度