Strange behaviour: struct with cell values
5 次查看(过去 30 天)
显示 更早的评论
Hi there,
I'm writing a bigger piece of code and I am using structs as input variables. Now I changed (or tried to change) one input parameter in this struct from an array to cell. A little bit of code first:
order = 1; %Dumm
param = {1,2,zeros(2,2)};
opt1.order = order;
opt1.param = param;
opt2 = struct('order',order,'param',param);
As we can see from that bit of sample code,:opt1 is a 1x1 struct (which is what I want) and opt2 is a 1x3 struct (which I do ABSOLUTELY not want).
Why do the two lines of code behave differently?
Is there a way, that opt2 does not get expanded to a 1x3 struct?
Thanks so much!
0 个评论
采纳的回答
Stephen23
2022-6-27
编辑:Stephen23
2022-6-27
"Strange behaviour: struct with cell values"
The STRUCT() documentation explains what happens with cell array inputs: "... if value is a scalar cell array, then s is a scalar structure... If value is a nonscalar cell array, then s is a structure array with the same dimensions as value."
So it is very simple: if you want the output to be a scalar structure, then the input must be a scalar cell array.
You can achieve this very easily by nesting your (non-scalar) cell array in a scalar cell array:
order = 1; %Dumm
param = {1,2,zeros(2,2)};
opt2 = struct('order',order,'param',{param})
3 个评论
Steven Lord
2022-6-27
The command opt1.param = param doesn't call the struct function. It performs indexed assignment. Indexed assignment into a struct array doesn't have the same behavior as calling the struct function.
Why does struct behave this way? That predates the start of my time at MathWorks, and I haven't done the archaeology to try to determine the reason for that behavior.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Structures 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!