【问题标题】:What are brackets `[]` doing in Matlab, if not filled with numbers?如果没有用数字填充,Matlab 中的括号 `[]` 会做什么?
【发布时间】:2014-09-11 07:22:49
【问题描述】:

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

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

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。来自有对象的单元格?

当在它给出的字段上再次使用[] 表示法时

K>> [objects.name]

ans =

Object1Object2Object3

K>> class([objects.name])

ans =

char

【问题讨论】:

  • 方括号创建向量或矩阵

标签: matlab brackets notation


【解决方案1】:

[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,然后用ClassA 类的默认对象填充未指定的元素。为此,它调用ClassA 的构造函数,但您需要知道它调用构造函数没有输入参数

因此,如果您希望能够支持使用类的对象填充这种数组,则需要实现类构造函数,以便在使用零输入参数调用时不会出错。例如,您可以简单地检查nargin,如果它为零,则提供一些默认输入,否则接受提供的任何输入。

顺便说一句,默认情况下[] 属于double 类。如果要创建类ClassA 的空数组,可以使用objects = ClassA.emptyemptyall MATLAB 类的内置方法。通过确保不会意外尝试将 doubles 与 ClassA 类的对象连接起来,您可能会发现避免了一些错误。

【讨论】:

  • objects = ClassA.empty 是一个很好的提示。我会使用单元格,但[objects.property] 语法非常方便收集对象的属性值。
【解决方案2】:

如果您确实需要一个空的对象数组,请使用您拥有的一些对象并索引“无”(从 2 到 1):

x=obj1(2:1)

Result 是一个具有匹配类型的空数组。在这里您可以使用x(end+1) 追加。或者,您可以使用类似的代码来追加。如果 x 不存在,它将使用匹配的类型创建。

if exist('x','var')
   x(end+1)=obj
else
   x(1)=obj
end

【讨论】:

  • 如果您需要一个空的对象数组,请使用ClassName.emptyempty 是所有 MATLAB 类的内置方法,专门为此目的而定义。
  • @SamRoberts:从未注意到存在这样的功能。使用empty 绝对是更好的解决方案。
【解决方案3】:

您正在做的是创建结构。我要做的是为objects 创建相同的结构,然后用您的第一个对象覆盖第一个索引,然后遍历其余的:

% Assume we have classA.m file available
obj1 = classA();
obj2 = classA();
obj3 = classA();

objects = obj1;
objects(end+1) = obj2;
objects(end+1) = obj3;

【讨论】:

  • 它们不是结构,它们是数组。
  • @SamRoberts,我指的是 obj 本身。问题是这些东西叫什么。我知道变量objects 是一个结构数组。
  • objects 不是结构数组,它是类ClassA 的对象数组。问题中没有提到结构或结构数组。
【解决方案4】:

方括号用于连接

如果方括号之间有元素,则表示将元素连接起来。

元素可以是标量、字符串、向量、矩阵等。

示例

假设对象结构的名称字段包含一个字符串,您可以像这样连接它们:

[objects.name]

结果将是:

[objects(1).name objects(2).name ... objects(end).name]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    • 2017-01-18
    • 2021-05-16
    相关资源
    最近更新 更多