我需要用可变参数包装一个方法。例如:
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
的任何配置作为输入的方法。
答案 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');
这给了我: