Strange behavior when initializing empty cell in struct()

3 ビュー (過去 30 日間)
Chandler
Chandler 2024 年 6 月 20 日
コメント済み: Stephen23 2024 年 6 月 20 日
Structs initialized with an empty cell using both {} and cell.empty within a struct() returns an empty struct object.
The following function reproduces that:
function print_hello_world()
obj = struct(MyProp=123, MyOtherProp={}); % or MyOtherProp=cell.empty
disp(obj)
disp(isempty(obj))
end
The obj variable is empty when running print_hello_world.
I have resorted to the following to go around this issue:
function print_hello_world()
obj = struct(MyProp=123);
obj.MyOtherProp = {};
disp(obj)
disp(isempty(obj))
end
The value of obj is as expected when running the above.
  1 件のコメント
Stephen23
Stephen23 2024 年 6 月 20 日
"Structs initialized with an empty cell using both {} and cell.empty within a struct() returns an empty struct object."

サインインしてコメントする。

回答 (1 件)

Aquatris
Aquatris 2024 年 6 月 20 日
編集済み: Aquatris 2024 年 6 月 20 日
If you want to define the property as empty, then you should use '[]' instead of '{}'.
obj = struct(MyProp=123, MyOtherProp=[]);
disp(obj)
MyProp: 123 MyOtherProp: []
This is an intended behaviour. Here is the relevant part of the documentation:
s = struct(field1,value1,...,fieldN,valueN) creates a structure array with multiple fields.
  • ...
  • If any value input is an empty cell array, {}, then output s is an empty (0-by-0) structure. To specify an empty field and keep the values of the other fields, use [] as a value input instead.
  1 件のコメント
Stephen23
Stephen23 2024 年 6 月 20 日
Or if an empty cell array is required:
obj = struct(MyProp=123, MyOtherProp={{}});

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeProgramming Utilities についてさらに検索

タグ

製品


リリース

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by