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!

 채택된 답변

Stephen23
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})
opt2 = struct with fields:
order: 1 param: {[1] [2] [2×2 double]}

댓글 수: 3

Oh ok - I missunderstood that line of the documentation. And I guess
opt1.param = param
automatically assumes the input to be a scalar cell array?!
Steven Lord
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.
Ok perfect. I'll just write a wrapper-function to ensure user-independent, predictable input in the struct and then I'm fine. Perfect! Thank you!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Structures에 대해 자세히 알아보기

질문:

2022년 6월 27일

댓글:

2022년 6월 27일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by