在找到处理空结构的逻辑之后,我想检查这是如何推广到矩阵的.
在这里我注意到以下内容:
如果您有1x1矩阵,并分配给第一个元素.它与分配给所有元素不同.
这让我感到很惊讶,因为第一个元素与本案例中的所有元素完全相同.以下是我的观察:
x = 1;
y = 1;
z = 1;
x(:) = []; % Evaluates to [] as I expected
y(1) = []; % Evaluates to Empty matrix: 1-by-0, rather than []
z(1,1) = []; %Throws an error: 'Subscripted assignment dimension mismatch.' even though size(z) gives [1 1];
z(1,:) = []; % Evaluates to Empty matrix: 0-by-1, just like z(:,:) = []
Run Code Online (Sandbox Code Playgroud)
看到这个之后,我的问题是:
为什么以不同的方式分配同一个东西,导致四种不同的结果?
假设我有一个S大小为0x1 的结构,且带有字段a和b,向其添加字段的最优雅的方法c是什么?
通常,我能够这样做:
S = struct('a',0,'b',0); %1x1 struct with fields a,b
S.c = 0
Run Code Online (Sandbox Code Playgroud)
但是,如果我收到一个空的结构,它将不再起作用:
S = struct('a',0,'b',0);
S(1) = []; % 0x1 struct with fields a,b
S.c = 0;
% A dot name structure assignment is illegal when the structure is empty.
% Use a subscript on the structure.
Run Code Online (Sandbox Code Playgroud)
我已经想到了两种方法来解决此问题,但是这两种方法都很难看,感觉像是解决方法,而不是解决方案。(请注意,也应正确处理非空结构的可能性)。
我意识到,我关心空结构可能很奇怪,但是不幸的是,如果字段名不存在,则由我管理的部分代码将崩溃。我已经查看了help struct,help subsasgn并且还搜索了给定的错误消息,但是到目前为止,我还没有发现任何提示。因此,非常感谢您的帮助!