我想构造一个具有三个属性的struct对象:
arg1 = 42;
arg2 = 'test';
arg3 = cell(0);
但是如果我尝试初始化这个对象:
struct('arg1', arg1, 'arg2', arg2, 'arg3', arg3);
它返回一个空的struct:
ans =
0×0 empty struct array with fields:
arg1
arg2
arg3
我发现空单元格是罪魁祸首,所以如果我在没有空单元格的情况下初始化它,它会返回一个正确的值:
ans =
struct with fields:
arg1: 42
arg2: 'test'
arg3: []
但是我需要我的代码来处理空单元格,我不知道它们是否在某个字段中,或者它们在哪里。
有办法解决这个问题吗?
2条答案
按热度按时间yptwkmov1#
@Wolfie对行为的解释是正确的。
解决方法是将数据放在单元数组中,如下所示:
这是因为文档中的这一行:
所以我们把所有的值输入单元数组。
{arg3}
与{{}}
相同,是一个单元数组,只有一个元素:一个空的单元数组。请注意,可以使用以下语法创建结构体数组:
因为
'arg1'
参数是一个有3个元素的单元数组,所以创建的结构数组也有3个元素。具有单个元件的单元阵列在所有单元阵列中被复制。8oomwypt2#
这是documented行为:
s = struct(field,value)
使用指定的field
和values
创建一个结构数组。value
输入参数可以是任何数据类型,如数字、逻辑、字符或单元数组。value
输入是非标量单元数组,则s
具有与非标量单元数组相同的维数。[...]*如果
value
是一个空的单元数组{}
,那么s
是一个空的(0乘0)结构。要指定空字段并保留其他字段的值,请使用[]
作为值输入给你的外卖是最后一行。
为了解决这个问题,你必须做检查,比如
如果你的结构中总是只有3个元素,那么这是相当简单的实现。