【问题标题】:How To Create a Polymorphic Array in Matlab如何在 Matlab 中创建多态数组
【发布时间】:2017-06-07 04:08:34
【问题描述】:

我想创建一个抽象类的数组,并在数组的每个元素上调用一些 run() 方法,该方法引用该类的实现。

在 Java 之类的语言中(请原谅语法,这只是为了说明一点),代码类似于:

abstract class Base{
    public void run();
}

class Derived0 extends Base{
    public void run(){...};//overrides Base's run() method
}

class Derived1 extends Base{
    public void run(){...};//overrides Base's run() method
}

class Derived2 extends Base{
    public void run(){...};//overrides Base's run() method
}

主要:

Base baseArray[3];
baseArray[0] = new Derived0();
baseArray[1] = new Derived1();
baseArray[2] = new Derived2();

//runs each possible run() method, without main knowing any of them.
for(int i=0;i<3;++i){
    baseArray.run();
}

我想在matlab中实现这个行为

到目前为止,我得到的是这个问题的公认答案:

Inheritence Polymorphism In Matlab

我缺少的是如何制作数组baseArray?

baseArray = [] 这样的东西会导致baseArray(1) = Derived0; 期望翻倍,因此失败。

在matlab中不可能实例化Base的数组,因为类是抽象的,用matlab的创建对象数组的方式(我知道的)不能创建实例。

所以,请帮我在 Matlab 中实现一个多态数组。

我也很欣赏 python 解决方案,尽管 Matlab 解决方案是最好的。

谢谢!

【问题讨论】:

    标签: python matlab oop polymorphism


    【解决方案1】:

    在 MATLAB 中,如果您使用 baseArray = [] 实例化数组,那么您已经声明该数组将是 double 类型,因此它将无法工作。相反,您可以使用类的empty method 创建一个空数组该类

    baseArray = Derived0.empty();
    baseArray(1) = Derived0();
    

    或者,您可以一次创建数组

    baseArray = [Derived0(), Derived0(), Derived0()];
    

    另外,如果你想拥有一个异构的对象数组,你需要确保你的基类也继承自matlab.mixin.Heterogeneous,然后你可以这样做

    baseArray = [Derived0(), Derived1(), Derived2()];
    

    【讨论】:

    • 不错!但是 - 如果我希望我的数组以固定大小 n 实例化并且每次添加元素时都不会增长怎么办?你的第一种方法使它增长,而第二种方法不允许可变大小
    • @Gulzar 这在 MATLAB 中是不可能的。拥有预分配数组的唯一方法是用 actual 对象填充它,就像我的第二个示例中一样,然后用新对象替换它们。您可以创建一个对 same 对象的引用数组来实例化它。还有一些更相关的信息here
    猜你喜欢
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多