另一个 class 中特定 class 的多个字段
Multiple fields of specific class in another class
我正在 MATLAB 中开发一个面向对象的程序。我有一个名为 MyNode
的 class 和一个名为 MyService
的 class,如您所见:
classdef MyService
% ......
end
classdef MyNode
properties
MyNode % List of neighbor Nodes
MyService % List of services that I request
MyService % List of services that I provide
end
end
我希望 class MyNode
具有 MyService
class 的两个实例,但我还希望具有 MyNode
对象的列表在它的定义中。我知道这段代码在 MATLAB 中不正确。我该怎么做?
您将 属性 名称 与 属性 class 规范 混淆了(它们不是MATLAB 中需要)。在您编写的代码中,您最终得到 fields,name 为 MyNode
和 MyService
,让 MATLAB 假设数据类型应该是什么(未初始化时可能是 double
,而不是您想要的)。
要解决此问题,请阅读 validating property values 上的文档页面。您会发现为 properties/fields 指定 class 的方法是使用以下语法完成的:
在你的情况下,这可能看起来像这样:
classdef MyNode
properties
neighbors(:,1) MyNode % List of neighbor Nodes
% ^ name ^ size ^ class
rService(1,1) MyService % List of services that I request
pService(1,1) MyService % List of services that I provide
end
end
我还建议在您的 classes 中添加一些 constructors。
最后,我想提一下,我在 R2018a 中测试了上述递归 class 定义。如果你的MATLAB版本比较老(R2016a之前),你只能使用here提到的语法,大致是:
<varName>@<class> <scalar/vector/matrix> = <initial value>;
我正在 MATLAB 中开发一个面向对象的程序。我有一个名为 MyNode
的 class 和一个名为 MyService
的 class,如您所见:
classdef MyService
% ......
end
classdef MyNode
properties
MyNode % List of neighbor Nodes
MyService % List of services that I request
MyService % List of services that I provide
end
end
我希望 class MyNode
具有 MyService
class 的两个实例,但我还希望具有 MyNode
对象的列表在它的定义中。我知道这段代码在 MATLAB 中不正确。我该怎么做?
您将 属性 名称 与 属性 class 规范 混淆了(它们不是MATLAB 中需要)。在您编写的代码中,您最终得到 fields,name 为 MyNode
和 MyService
,让 MATLAB 假设数据类型应该是什么(未初始化时可能是 double
,而不是您想要的)。
要解决此问题,请阅读 validating property values 上的文档页面。您会发现为 properties/fields 指定 class 的方法是使用以下语法完成的:
在你的情况下,这可能看起来像这样:
classdef MyNode
properties
neighbors(:,1) MyNode % List of neighbor Nodes
% ^ name ^ size ^ class
rService(1,1) MyService % List of services that I request
pService(1,1) MyService % List of services that I provide
end
end
我还建议在您的 classes 中添加一些 constructors。
最后,我想提一下,我在 R2018a 中测试了上述递归 class 定义。如果你的MATLAB版本比较老(R2016a之前),你只能使用here提到的语法,大致是:
<varName>@<class> <scalar/vector/matrix> = <initial value>;