在逗号sep上结合使用此问题和Mathworks帮助.列表我提出了这种丑陋的方式使我的格式化参数更漂亮:
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{:});
Run Code Online (Sandbox Code Playgroud)
但它仍然有点难看...有没有办法将结构解压缩成一堆Python字典的参数**kwargs?
例如,如果我有(恕我直言)清洁结构:
formatting = struct()
formatting.color = 'black';
formatting.fontweight = 'bold';
formatting.fontsize = 24;
Run Code Online (Sandbox Code Playgroud)
我能以某种方式通过吗?如果我直接尝试(xlabel('blah', formatting)或者formatting{:},它会说"错误的论点数".
您可以使用此功能将结构转换为单元数组:
function c = struct2opt(s)
fname = fieldnames(s);
fval = struct2cell(s);
c = [fname, fval]';
c = c(:);
Run Code Online (Sandbox Code Playgroud)
然后
formatting = struct2opt(formattingStructure);
xlabel('Distance', formatting{:});
Run Code Online (Sandbox Code Playgroud)
你很近.只需切换到1-D单元阵列即可.
formatting = {'Color', 'Red', 'LineWidth', 10};
figure
plot(rand(1,10), formatting{:})
Run Code Online (Sandbox Code Playgroud)
如果你真的想使用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{:})
Run Code Online (Sandbox Code Playgroud)
结构解包一个单独的小函数可能是一个好主意,这样你就可以轻松地重用它.