在Matlab

时间:2015-12-17 11:35:50

标签: matlab oop

我想声明一个接受用户定义类型插入的空向量。在以下示例中,node是我使用classdef node ...

定义的类型

以下代码被Matlab解释器拒绝,因为空向量自动初始化为double类型,因此不能插入node

>> a = [];
>> a(1) = node(1,1,1);
The following error occurred converting from node to double:
Conversion to double from node is not possible.

接受下面的代码,因为向量初始化时带有node,因此稍后可以插入节点。

>> a = [node(1,1,1)];
>> a(1) = node(1,2,1);

但是,我想创建一个可以插入节点的向量。我可以这样做尴尬:

>> a = [node(1,1,1)];
>> a(1) = [];

什么是更好的方法?我正在寻找一些声明空矢量的初始类型为node的东西。如果我可以编写语法,它看起来像:

>> a = node[];

但这不是有效的Matlab语法。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:8)

可以通过

创建空对象
A = MyClass.empty;

它适用于您的自己的类,但也适用于 Matlab的类,例如

A = int16.empty;

此方法可以使用此语法

创建多维空对象
A = MyClass.empty(n,m,0,p,q);

只要一个维度设置为零。

请参阅doc

答案 1 :(得分:3)

您没有指定您的类包含的内容,但是,一般来说,也可以使用zerosones等数组创建函数以及其他用户定义的类。

对于内置类,您可能会调用

A = zeros(2,3,'uint8');

创建数据类型为uint8的2乘3的零矩阵。类似的语法也可以应用于适当类型的用户定义类,例如:

A = zeros(2,3,'MyClass');

其中'MyClass'是您班级的名称,或举一个例子:

p = MyClass(...);
A = zeros(2,3,'like',p);

此信息的来源以及如何在用户定义的类中实现对数组创建功能的支持的规范可以在here找到。

zeros(0,0,'MyClass')之类的调用会产生MyClass类型的空向量。