在 MATLAB 中用可变参数包装方法

Wrap a method with variable arguments in MATLAB

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

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');  

我收到以下错误:

Error using plot3
Not enough input arguments.

基本上我需要的是一种接收两个点作为输入的方法以及 plot3.

的任何配置

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');

这给了我: