Используйте
[res(:).tag] = res(:).name;
или более просто, как вы открыли для себя:
[res.tag] = res.name;
Синтаксис с квадратными скобками слева подобен синтаксису, используемому для захватанесколько выходов, возвращаемых функцией: [out1, out2] = fun(...)
;см. специальные символы MATLAB .
На самом деле синтаксис res.tag
создает список , разделенный запятыми ;и [...]
является стандартным для присвоения значений каждому элементу в одном таком списке;см. Назначение вывода из списка через запятую .
В правой части назначения должен быть другой список через запятую.Если это отдельный элемент или вы хотите указать список вручную, вам нужно deal
:
values = {10, 20};
[res.test] = values{:}; % works. {:} produces a comma-separated list
[res.test] = 10,20; % doesn't work. Use `deal`
[res.test] = deal(10,20); % works
[res.test] = 10; % doesn't work, unless `res` is scalar. Use `deal`
[res.test] = deal(10); % also works. 10 is repeated as needed
Причина, по которой ваша попытка [res.tag] = [res.name];
не работаетчто [res.name]
с правой стороны объединяет результаты списка res.name
, разделенных запятыми, в один массив, так что это тот же случай, что и [res.test] = 10;
выше.