【问题标题】:Structure variable as input in MATLAB function using VARARGIN使用 VARARGIN 在 MATLAB 函数中作为输入的结构体变量
【发布时间】:2018-09-17 08:03:03
【问题描述】:

我在 Matlab 中编写了一个 main 函数,它调用其他函数,每个函数都会在一个新图形中生成绘图。尽管每个函数会产生不同的图(不同的颜色、子图的数量等),但它们都有一些共同的特征(字体、字体大小、线宽等)。

为了方便修改上述所有MATLAB图形的共享参数,我在主函数的序言中定义了一个结构体变量如下:

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

提示如下错误信息“Struct contents reference from a non-struct array object。”

【问题讨论】:

    标签: matlab data-structures matlab-figure


    【解决方案1】:

    您对元胞数组的索引不正确(这很容易做到)。

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

    修复:使用花括号:

    temp = varargin{1};
    

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

    这里有一些关于索引元胞数组的文档,其中更详细地描述了不同之处:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多