首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >抽象超类的Matlab类型检查

抽象超类的Matlab类型检查
EN

Stack Overflow用户
提问于 2016-12-15 13:30:12
回答 1查看 180关注 0票数 1

在许多编程语言(例如C# )中,您可以向类构造函数提供参数类型。

类似于:

代码语言:javascript
运行
复制
MyConstructor(IDependencyClass)

在这里,'IDependencyClass‘是一个接口。这允许您使用组件的依赖注入和松散耦合。

Matlab也支持OOP,即使它不是强类型的,也不提供类接口(AFAIK)这样的概念,但我天真地认为我可以使用以下任何一个变体:

代码语言:javascript
运行
复制
classdef (Abstract) AbsClass 
   ...
end

接下来,在任何依赖于AbClass的类中,我要么创建如下所示的私有属性:

代码语言:javascript
运行
复制
properties (Access = private)

    % The DataModule type is restricted AbsClass.
    DataModule Core.Modularity.AbsBase

end

然后,可以将此属性设置为“建筑”。

或者,我可以在构造函数中使用如下内容进行检查:

isa(input argument, 'Core.Modularity.AbsBase')

奇怪的是,Matlab不想玩球,抛出一个错误:

代码语言:javascript
运行
复制
Abstract classes cannot be instantiated.  
Class 'Core.Modularity.AbsClass' defines abstract methods and/or properties

对我来说这有点奇怪..。显然,Matlab的类型检查机制想要创建抽象类的实例,这显然是不可能的。

但是,如果您想要设计一个中等到高复杂度的适当应用程序,则无法做到这一点是一个巨大的缺点。

我遗漏了什么?

编辑

相当愚蠢,但事实证明,“isa()”方法确实有效,但我确实省略了

尽管限制Properties类方法不起作用仍然有点奇怪:

oop/restrict-class-of-properties.html

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-15 13:34:56

问题是,如果您想限制给定属性的类,MATLAB需要为该属性(该类)创建一个默认值,因此必须能够成功地调用empty方法(Core.Modularity.AbsClass.empty()),但是由于它是一个抽象类,这是不可能的。

尝试这样做,会导致以下错误:

当限制属性值的类时,必须将属性限制为具体的类。在“MyClass”中属性'DataModule‘的定义中替换抽象类’DataModule‘。

现在从技术上讲,you can use the old (and undocumented) syntax for restricting the class of a property和显然它是有效的

代码语言:javascript
运行
复制
classdef MyClass
    properties
        DataModule@Core.Modularity.AbsBase
    end
end

奇怪的是,如果我们检查DataModule,它实际上是Core.Modularity.AbsClass的一个0 x 0实例。

代码语言:javascript
运行
复制
inst = MyClass()
class(inst.DataModule)
%   Core.Modularity.AbsClass

size(inst.DataModule)
%   0   0

另一个选项是使用isa强制执行给定输入参数的类型。另外,需要注意的是,isa的第二个输入必须是字符串,这样您就不会遇到与上面相同的问题,因为MATLAB试图实例化一个抽象类。

代码语言:javascript
运行
复制
classdef MyClass < handle
    methods
        function self = MyClass(cls)
            disp(isa(cls, 'Core.Modularity.AbsClass'))
        end
    end
end
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41165387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档