验证属性是 MATLAB 中抽象类的子类

Phi*_*ill 3 oop validation matlab

我对 Matlab 中的 OOP 是全新的,并且总体上对 OOP 还很陌生,但我所知道的东西是我在 C++ 中学到的。

我正在关注此处找到的 Matlab 文档属性类和大小验证。我想验证一个属性,以便它必须是一个特定的类,并且我正在使用链接中的示例。这就是我的班级的样子:

classdef simpoint
   ...
   properties
      ...
      outputType dataType
      ...
   end
   ...
end
Run Code Online (Sandbox Code Playgroud)

在我的代码中dataType是我编写的一个类。更重要的是它是抽象的。

我收到错误

Error defining property 'outputType' of class 'simpoint':
Class dataType is abstract. Specify a default value for property outputType.
Run Code Online (Sandbox Code Playgroud)

该类dataType是抽象的,以强制用户实现某些方法。我正在尝试使用属性验证来确保outputType设置时,该类是dataType.

我真的不想设置默认值,因为忘记设置outputType会引发错误。

我如何验证outputType以确保它是 的子类dataType?在Matlab中有没有更好的方法来做到这一点?

dez*_*lov 5

对于这个问题有一个更优雅的解决方案,但显然并不为人所知。

\n

MATLAB 有一个异构类层次结构的概念。这只是显式声明公共根类(抽象或非抽象)的奇特方式,以便它可以用于属性验证。在实践中,您所需要做的就是让您的抽象类继承自matlab.mixin.Heterogeneous.

\n

这是一个简单的例子:

\n
classdef (Abstract) AbstractItem < handle & matlab.mixin.Heterogeneous\nend\n
Run Code Online (Sandbox Code Playgroud)\n
classdef Collection < handle\n    properties\n        items AbstractItem\n    end\nend\n
Run Code Online (Sandbox Code Playgroud)\n

那么你就没有问题了:

\n
>> x = Collection\n\nx = \n\n  Collection with properties:\n\n    items: [0\xc3\x970 AbstractItem]\n
Run Code Online (Sandbox Code Playgroud)\n

如果没有matlab.mixin.Heterogeneous继承,您将收到如下错误:

\n
\n

定义类“Collection”的属性“items”时出错。AbstractItem 类是抽象的。指定属性项的默认值。

\n
\n