在Matlab中动态访问嵌套字段

时间:2013-05-23 08:54:24

标签: matlab struct

(如何)我可以动态访问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})

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更具可读性和更快速(否则速度比较对于这样的基本任务来说是难以辨别的。)