另一个 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 中需要)。在您编写的代码中,您最终得到 fieldsnameMyNodeMyService,让 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>;