(如何)我可以动态访问 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})
我不太满意的一种解决方案是:主要是因为它缺乏.( )
动态字段名称语法的优雅:
getfield(a, place{:})
只是为了变化,您可以使用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
(否则对于这样的基本任务,速度比较是难以辨别的)。