什么是括号`[]`在Matlab中做什么,如果没有填充数字?

时间:2014-09-11 07:22:49

标签: matlab brackets notation

如果没有填充数字,那么在Matlab中使用的[]括号是什么?

假设我们有obj1的一些对象obj2obj3ClassA。显然,它可以将它们与括号组合在一起......不知道,实际上是什么

objects = [obj1 obj2 obj3];

>> class(objects)

ans =

ClassA

>> objects

objects = 

  1x3 ClassA handle

  Properties:
    name
    ...
  1. 这叫什么?
  2. 如何反复建立这样的东西?
    objects = []; objects(end+1) = current_obj;不起作用 objects{end+1} = current_obj;创建一个单元格
  3. 如何转换为此e。 G。来自带有物体的牢房?
  4. 在字段上再次使用[]表示法时,它会给出

    K>> [objects.name]
    
    ans =
    
    Object1Object2Object3
    
    K>> class([objects.name])
    
    ans =
    
    char
    

4 个答案:

答案 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的空数组,可以使用ClassAobjects = 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]