如果没有填充数字,那么在Matlab中使用的[]
括号是什么?
假设我们有obj1
的一些对象obj2
,obj3
和ClassA
。显然,它可以将它们与括号组合在一起......不知道,实际上是什么
objects = [obj1 obj2 obj3];
>> class(objects)
ans =
ClassA
>> objects
objects =
1x3 ClassA handle
Properties:
name
...
objects = []; objects(end+1) = current_obj;
不起作用
objects{end+1} = current_obj;
创建一个单元格在字段上再次使用[]
表示法时,它会给出
K>> [objects.name]
ans =
Object1Object2Object3
K>> class([objects.name])
ans =
char
答案 0 :(得分:7)
[obj1 obj2 obj3]
是类ClassA
的对象的数组,就像[1 2 3]
是数字数组一样。
如果您输入a = []; a(2) = 1
,MATLAB会将a
作为[0 1]
返回,换句话说,它将使用默认元素填充a
的任何未指定元素,其中数字的情况是零。
当您键入objects = []; objects(2) = current_obj
时,MATLAB会尝试将current_obj
置于objects
的请求位置2,然后使用类{{1}的默认对象填充未指定的元素}。为此,它调用ClassA
的构造函数,但您需要知道它调用构造函数而没有输入参数。
因此,如果您希望能够支持这种填充类的对象的数组,则需要实现类构造函数,以便在使用零输入参数调用时不会出错。例如,您只需检查ClassA
,如果它为零,则提供一些默认输入,否则接受提供的任何输入。
顺便说一下,默认nargin
属于[]
类。如果要创建类double
的空数组,可以使用ClassA
。 objects = ClassA.empty
是所有 MATLAB类的内置方法。您可能会发现通过确保不会意外地尝试将empty
与类double
的对象连接来避免一些错误。
答案 1 :(得分:0)
如果你真的需要一个空的对象数组,请使用你拥有的一些对象并索引"没有" (从2到1):
x=obj1(2:1)
Result是一个匹配类型的空数组。您可以在此处使用x(end+1)
附加。或者,您可以使用类似的代码进行追加。如果x不存在,则将使用匹配类型创建。
if exist('x','var')
x(end+1)=obj
else
x(1)=obj
end
答案 2 :(得分:0)
您正在做的是创建结构。我要做的是为objects
创建相同的结构,然后用你的第一个对象覆盖第一个索引,然后遍历其余的:
% Assume we have classA.m file available
obj1 = classA();
obj2 = classA();
obj3 = classA();
objects = obj1;
objects(end+1) = obj2;
objects(end+1) = obj3;
答案 3 :(得分:0)
如果你的方括号中包含元素,那么就是连接元素。
元素可以包括标量,字符串,向量,矩阵等。
假设对象struct的名称字段包含一个字符串,您可以像这样连接所有字符串:
[objects.name]
结果将是:
[objects(1).name objects(2).name ... objects(end).name]