使用VARARGIN将结构变量作为输入在MATLAB函数中

问题描述 投票:1回答:1

我在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

将显示以下错误消息“从非结构数组对象中构造内容引用”。

matlab data-structures matlab-figure
1个回答
1
投票

您正在错误地索引单元格数组(这很容易完成)。

  • 索引单元格数组时,圆括号( )会为您提供单元格输出 - 即您的temp是1x1单元格,其中包含结构。
  • 你需要花括号{ }来提取单元格数组的内容。

修复:使用花括号:

temp = varargin{1};

我有时会将单元格数组视为一组框,因为每个元素(或类比中的“框”)基本上可以包含任何内容。要提取框的子集,请使用圆括号。要提取框的内容,请使用大括号。这种类比也扩展到表,其中符号是一致的。

这里有一些索引单元格数组的文档,其中更详细地描述了差异:

https://uk.mathworks.com/help/matlab/matlab_prog/access-data-in-a-cell-array.html

© www.soinside.com 2019 - 2024. All rights reserved.