按子字段列表更新嵌套结构

the*_*alk 3 matlab struct eval

今天的另一集"趣味结构",这个是一个艰难的一集.我想通过给定长度的子字段列表动态创建嵌套结构,如下例所示:

x = 42;
a.e = struct;
subfields = {'b','c','d'}; %// arbitary length!

%// desired result
a.b.c.d = x;
Run Code Online (Sandbox Code Playgroud)

怎么办?


当然有一种邪恶的eval解决办法,但我尽量避免变得邪恶.

evalexp = ['a' cellfun(@(s) ['.' s], subfields, 'uni',0)];
evalexp = [evalexp{:}];
eval( [evalexp '= x'])
Run Code Online (Sandbox Code Playgroud)

exc*_*aza 7

你可以使用setfield:

x = 42;
a.e = struct;
subfields = {'b','c','d'};

a = setfield(a, subfields{:}, x);
Run Code Online (Sandbox Code Playgroud)

哪个回报:

>> a.b.c.d

ans =

    42
Run Code Online (Sandbox Code Playgroud)