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

时间:2018-09-17 08:03:03

标签: matlab data-structures matlab-figure

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

为了使修改所有MATLAB图形的上述共享参数更加容易,我在主函数的序言中定义了如下结构变量:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<body onload="rvalue()">
  <div id="container">
    <div class="box"  ondrop="drop(event)" ondragover="allowDrop(event)" id="10">
      <p name="values"></p>
    </div>

    <div class="box"  ondrop="drop(event)" ondragover="allowDrop(event)" id="11">
      <p name="values"></p>
    </div>

    <div class="box"  ondrop="drop(event)" ondragover="allowDrop(event)" id="12">
      <p name="values"></p>
    </div>
  </div>

  <div class="box002" draggable="true" ondragstart="drag(event)" id="2">
    <img src="" draggable="true" id="slide" style="width:30px; height:30px; border-radius: 50%;" border="rounded"/>    
  </div>    
</body>

,对于其他字段,依此类推。当我以这种方式调用函数时(提供结构作为输入):

var.font = 'Arial Unicode MS';
var.fontsize = 13;
var.interpreter = 'none' ;

一切正常,功能将功能应用于每个图形。但是,如果我尝试使用varargin向函数提供可变数量的输入,则采用这种方式

function plot1( var , ... )
    fig = gcf
    fig.Position(3) = var.Position3
    fig.Position(4) = var.Position4
end

系统提示以下错误消息“来自非结构数组对象的结构内容引用”。

1 个答案:

答案 0 :(得分:1)

您对单元格数组的索引错误(这很容易做到)。

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

修复:使用大括号:

temp = varargin{1};

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

以下是一些关于为单元格建立索引的文档,其中差异的详细说明:

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