empty cell array value lost when passed to a function as a part of an anonymous structure
1 次查看(过去 30 天)
显示 更早的评论
Consider the following:
>> x % x is a simple two-field structure
x =
x: 1
y: 'y'
>> type('printMe.m') % printMe is just a simple function
function printMe(x)
size(x), x
>> printMe(x)
ans =
1 1
x =
x: 1
y: 'y'
>> printMe(struct('x', 1, 'y', 'y')) % Same result passing in an equivalent anonymous struct
ans =
1 1
x =
x: 1
y: 'y'
>> % But look what happens if one of the values is an empty cell array
>> printMe(struct('x', 1, 'y', {}))
ans =
0 0
x =
0x0 struct array with fields:
x
y
>> % Is this because it's empty
>> printMe(struct('x', 1, 'y', ''))
ans =
1 1
x =
x: 1
y: ''
>> printMe(struct('x', 1, 'y', []))
ans =
1 1
x =
x: 1
y: []
>> printMe(struct('x', 1, 'y', struct))
ans =
1 1
x =
x: 1
y: [1x1 struct]
>> % Apparently not!
So, apparently, if (and only if) a value in an anonymous struct passed to a function is an empty cell array, the function "loses" all the values in the anonymous struct and thinks it's empty (though, curiously, it doesn't completely "lose" the struct and in particular it retains "knowledge" of its fields, just not the values assigned to those fields).
Bug or "feature," and if the latter, rationale?
Thanks for your time,
OlyDLG
0 个评论
采纳的回答
Walter Roberson
2011-7-19
Feature. Using a cell array in struct() is the constructor for an array structure; for example,
struct('x',{1 3}, 'y', {4 6})
produces a 1x2 struct array.
When an empty entry is used, it signals to struct() that the struct array as a whole is to be of size 0.
You can use {{}} if you want an actual empty cell at that location.
更多回答(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!