我在Matlab中编写了一个主函数,它调用其他函数,每个函数都生成一个新图中的图。虽然每个函数产生不同的图(不同的颜色,子图的数量等),但它们都共享一些特征(字体,字体大小,线宽等)。
为了更容易修改所有MATLAB图形的上述共享参数,我在main函数的前言中定义了一个结构变量,如下所示:
var.font = 'Arial Unicode MS';
var.fontsize = 13;
var.interpreter = 'none' ;
等等其他领域。当我以这种方式调用函数时(提供结构作为输入):
function plot1( var , ... )
fig = gcf
fig.Position(3) = var.Position3
fig.Position(4) = var.Position4
end
一切正常,功能将功能应用于每个图形。但是,如果我尝试使用varargin以这种方式为函数提供可变数量的输入
function plot1( varargin )
fig = gcf;
temp = varargin(1);
fig.Position(3) = temp.Position3;
fig.Position(4) = temp.Position4;
end
将显示以下错误消息“从非结构数组对象中构造内容引用”。
您正在错误地索引单元格数组(这很容易完成)。
( )
会为您提供单元格输出 - 即您的temp
是1x1单元格,其中包含结构。{ }
来提取单元格数组的内容。修复:使用花括号:
temp = varargin{1};
我有时会将单元格数组视为一组框,因为每个元素(或类比中的“框”)基本上可以包含任何内容。要提取框的子集,请使用圆括号。要提取框的内容,请使用大括号。这种类比也扩展到表,其中符号是一致的。
这里有一些索引单元格数组的文档,其中更详细地描述了差异:
https://uk.mathworks.com/help/matlab/matlab_prog/access-data-in-a-cell-array.html