首先,我将A
定义为一个结构体,并定义了另外两个结构体:B
元素的顺序与A
相同,而C
的元素顺序不同。
A.x = 11;
A.y = 11;
B.x = 21;
B.y = 22;
C.y = 31; %// Note that I am specifying
C.x = 32; %// y first and x second
A = B; %// Works fine
A = C; %// Works fine
将A
赋值给B
和C
是可以的,这也是我从结构体中预期的行为——元素的顺序不应该影响结果。
现在我将A
指定为一个结构体数组,尝试将它的一个元素分别赋值给B
和C
:
clear;
A(1).x = 11;
A(1).y = 12;
B.x = 21;
B.y = 22;
C.y = 31; %// Note that I am specifying
C.x = 32; %// y first and x second
A(1) = B; %// Works fine
A(1) = C; %// Error!
MATLAB突然报错:
不同结构之间的下标赋值
有人知道为什么会出现这种情况,以及如何优雅地修复它吗?
orderfields
。但是,我并不完全确定为什么MATLAB会表现出这种行为。很可能是因为在赋值期间内部比较了两个结构体的fieldnames
输出(未排序)。另一种选择是在循环内进行赋值,但那可能会导致性能下降。 - Sueversubsasgn
和cat
在字段排序方面的不同行为有点奇怪。如果排序很重要,至少要让它保持一致。 - Suever