【问题标题】:Multiple fields of specific class in another class另一个类中特定类的多个字段
【发布时间】:2018-05-13 14:01:23
【问题描述】:

我正在 MATLAB 中开发一个面向对象的程序。我有一个名为MyNode 的类和一个名为MyService 的类,如您在此处看到的:

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

我希望MyNode 类有两个MyService 类的实例,但我还希望在其定义中有一个MyNode 对象列表。我知道这段代码在 MATLAB 中不正确。我该怎么做?

【问题讨论】:

标签: matlab class oop properties class-design


【解决方案1】:

您将属性 names 与属性 类规范 混淆(在 MATLAB 中不是必需的)。在您编写的代码中,您最终拥有 fieldsnameMyNodeMyService,让 MATLAB 假设数据类型应该是什么(可能是 double未初始化时,而不是您想要的)。

要解决此问题,请阅读validating property values 上的文档页面。您会发现为属性/字段指定 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

我还建议在您的课程中添加一些 constructors

最后,我想提一下,我在 R2018a 中测试了上述递归类定义。如果你的 MATLAB 版本比较老(R2016a 之前),只能使用here 提到的语法,大致如下:

<varName>@<class> <scalar/vector/matrix> = <initial value>;

【讨论】:

  • 谢谢;我的 Matlab 版本是 2015b;所以我知道为什么我使用的语法是错误的。我应该使用旧语法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-25
相关资源
最近更新 更多