(如何)我可以动态访问Matlab中的嵌套字段吗?我正在考虑像这样的测试用例:
a = struct;
a.foo.bar = [];
place = {'foo', 'bar'};
a.(place{:})
% instead of the following, which only works if know in advance
% how many elements 'place' has
a.(place{1}).(place{2})
答案 0 :(得分:6)
我不满意的一个解决方案,主要是因为它缺乏.( )
动态字段名称语法的优雅,是:
getfield(a, place{:})
答案 1 :(得分:3)
仅为了变体,您可以使用subsref()
:
a.foo.bar = 'hi';
place = {'foo', 'bar'};
% Build subs for referencing a structure and apply subsref
typesub = [repmat({'.'},1,numel(place)); place];
subsref(a,substruct(typesub{:}))
ans =
hi
毫无疑问,如果你必须构建getfield()
,typesub
更具可读性和更快速(否则速度比较对于这样的基本任务来说是难以辨别的。)