使用 varargin 的匿名函数
Anonymous functions with varargin
我有一个函数需要 3 个强制输入和 1 个可选输入:
f(A, B, C, X)
我想这样使用匿名函数
h = @(X)f(A,B,C,X)
其中 A, B, C
已经被定义,所以我可以调用 h(1)
和代码 运行s f(A,B,C,1)
,以及 h()
至 运行 f(A,B,C)
。
我能够做到的唯一方法(如果我错了请纠正我)是使用 varargin
。我定义
f(A,B,C,varargin)
并使用
h = @(varargin)f(A,B,C,varargin)
问题是当我直接调用 f(A,B,C,1)
时,函数内部有 varargin = {1}
。如果我调用 h(1)
,那么我有 varargin = {{1}}
。我怎样才能避免这种情况?有没有更好的方法来实现我想要的?
您需要(或者更确切地说,最好是)将 varargin
扩展为 comma-separated list 并使用您当前的实现:
h = @(varargin)f(A,B,C,varargin{:})
是否有更好的方法取决于问题的具体情况。
我有一个函数需要 3 个强制输入和 1 个可选输入:
f(A, B, C, X)
我想这样使用匿名函数
h = @(X)f(A,B,C,X)
其中 A, B, C
已经被定义,所以我可以调用 h(1)
和代码 运行s f(A,B,C,1)
,以及 h()
至 运行 f(A,B,C)
。
我能够做到的唯一方法(如果我错了请纠正我)是使用 varargin
。我定义
f(A,B,C,varargin)
并使用
h = @(varargin)f(A,B,C,varargin)
问题是当我直接调用 f(A,B,C,1)
时,函数内部有 varargin = {1}
。如果我调用 h(1)
,那么我有 varargin = {{1}}
。我怎样才能避免这种情况?有没有更好的方法来实现我想要的?
您需要(或者更确切地说,最好是)将 varargin
扩展为 comma-separated list 并使用您当前的实现:
h = @(varargin)f(A,B,C,varargin{:})
是否有更好的方法取决于问题的具体情况。