Why the second one gives rise to empty struct?
s.a=1; s.b=2; s.c={}
s =
a: 1
b: 2
c: {}
s = struct('a',1,'b',2,'c',{})
s =
0x0 struct array with fields:
a
b
c

 Akzeptierte Antwort

per isakson
per isakson am 24 Nov. 2014
Bearbeitet: per isakson am 24 Nov. 2014

1 Stimme

That's the way the function struct is designed to work. See struct, Create structure array "[...]If value is an empty cell array {}, then s is an empty (0-by-0) structure."

4 Kommentare

Ray Lee
Ray Lee am 24 Nov. 2014
OK.
So I should use s = struct('a',1,'b',2,'c',struct([]))
per isakson
per isakson am 24 Nov. 2014
Bearbeitet: per isakson am 24 Nov. 2014
Or why not
s = struct('a',1,'b',2,'c',[]);
I guess it depends on the context. I don't really see the need. Do you intend to assign struct-values to s.c ?
Guillaume
Guillaume am 24 Nov. 2014
Bearbeitet: Guillaume am 24 Nov. 2014
If you do want to assign an empty cell array to a field of a structure using the struct function, you need to wrap that empty cell array into a cell array:
s = struct('a', 1, 'b', 2, 'c', {{}})
s =
a: 1
b: 2
c: {}
For that matter, even if the cell array is not empty you still need to wrap it to assign it to a scalar structure, otherwise the elements of the cell arrays are just distributed over an array of structs.
Ray Lee
Ray Lee am 26 Nov. 2014
good solution.
in my code, I checked if s.c is empty. if not, the code makes some processing using the parameters in s.c

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Gefragt:

am 24 Nov. 2014

Kommentiert:

am 26 Nov. 2014

Community Treasure Hunt

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

Start Hunting!

Translated by