5

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

2 回答 2

6

我不太满意的一种解决方案是:主要是因为它缺乏.( )动态字段名称语法的优雅:

getfield(a, place{:})
于 2013-05-23T09:18:58.263 回答
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(否则对于这样的基本任务,速度比较是难以辨别的)。

于 2013-05-23T15:45:22.700 回答