使用this question和this Mathworks help thing on comma sep. lists的组合我提出了这种丑陋的方式,使我的格式化参数更漂亮:
formatting{1,1} = 'color'; formatting{2,1} = 'black';
formatting{1,2} = 'fontweight'; formatting{2,2} = 'bold';
formatting{1,3} = 'fontsize'; formatting{2,3} = 24;
xlabel('Distance', formatting{:});
但是它仍然有点难看......有没有办法将一个结构解压缩成一堆Python字典到**kwargs
的参数?
例如,如果我有(恕我直言)清洁结构:
formatting = struct()
formatting.color = 'black';
formatting.fontweight = 'bold';
formatting.fontsize = 24;
我能以某种方式通过吗?如果我直接尝试(xlabel('blah', formatting)
或formatting{:}
,它就会说“参数数量错误”。
答案 0 :(得分:7)
您可以使用此功能将结构转换为单元格数组:
function c = struct2opt(s)
fname = fieldnames(s);
fval = struct2cell(s);
c = [fname, fval]';
c = c(:);
然后
formatting = struct2opt(formattingStructure);
xlabel('Distance', formatting{:});
答案 1 :(得分:6)
你非常接近。只需切换到1-D单元阵列即可。
formatting = {'Color', 'Red', 'LineWidth', 10};
figure
plot(rand(1,10), formatting{:})
如果你真的想使用struct来格式化参数,你可以将它解压缩到一个单元格数组并像上面一样使用它。
formattingStruct = struct();
formattingStruct.color = 'black';
formattingStruct.fontweight = 'bold';
formattingStruct.fontsize = 24;
fn = fieldnames(formattingStruct);
formattingCell = {};
for i = 1:length(fn)
formattingCell = {formattingCell{:}, fn{i}, formattingStruct.(fn{i})};
end
plot(rand(1,10), formatting{:})
将struct解压缩一个单独的小函数可能是一个好主意,这样你就可以轻松地重用它。