在MATLAB

时间:2016-03-24 16:32:15

标签: matlab plot overloading

我需要用可变参数包装一个方法。例如:

function p = plot3ex(varargin)

p1 = varargin{1};
p2 = varargin{2};

x = [p1(1,1) p2(1,1)];
y = [p1(2,1) p2(2,1)];
z = [p1(3,1) p2(3,1)];

extraArgs = varargin(3:end);

p = plot3(x,y,z,extraArgs);

当我以下列方式调用此函数时:

p = plot3ex(p1,p2,'--k','DisplayName','My plot 1');  

我收到以下错误:

  

使用plot3时出错   没有足够的输入参数。

基本上我需要的是一个接收两个点和plot3的任何配置作为输入的方法。

1 个答案:

答案 0 :(得分:4)

varargin,最终extraArgs是内容的单元格数组。将其余变量解压缩为comma separated list

p = plot3(x, y, z, extraArgs{:});

请注意,使用花括号 - {}非常重要。您如何调用plot3当前解析为以下等效函数调用:

p = plot3(x, y, z, {extraArgs{1}, extraArgs{2}, ..., extraArgs{end});

第四个输入参数被解析为内容的单元格数组。这就是您收到错误的原因,因为预期的是字符串/标志对和相关值。你现在如何做到这一点是不正确的。您需要解压缩单元格数组的内容,但要确保元素放在以逗号分隔的列表中。

执行extraArgs{:}等同于执行extraArgs{1}, extraArgs{2}, ..., extraArgs{end},如果您要调用plot3,则会手动将其放入函数中。您正在替换手动指定其余输入参数,方法是访问单元格数组中的每个元素,并将元素拆分为逗号分隔列表。

因此,执行extraArgs{:}会解析为以下等效函数调用:

p = plot3(x, y, z, extraArgs{1}, extraArgs{2}, ..., extraArgs{end});

......这是预期的。

运行示例

p1 = [0 0 0].';
p2 = [1 1 1].';
p = plot3ex(p1,p2,'--k','DisplayName','My plot 1');

这给了我:

enter image description here