我正在尝试定义一个匿名函数,该函数调用返回多个输出的函数版本.
例如,该函数 find
有两种可能的输出形式:
[row,col] = find(X);
Run Code Online (Sandbox Code Playgroud)
和
[ind] = find(X);
Run Code Online (Sandbox Code Playgroud)
说我想在匿名函数中选择第一个表单.
我试过 1)
get_columns = @(x) x(2);
Run Code Online (Sandbox Code Playgroud)
和2)
get_columns = @(x,y) y;
Run Code Online (Sandbox Code Playgroud)
但是当我打电话时:
get_columns(find(x))
Run Code Online (Sandbox Code Playgroud)
第一个版本get_columns
认为我打电话find
的[ind] = find(X)
,而不是作为[row,col] = find(X);
,而第二个与抱怨"Not enough input arguments"
.
是否有触发的方式具体的输出形式的函数内部的匿名函数?
直接,没有.不幸的是,有许多功能通过匿名函数无法访问,访问多个输出参数就是其中之一.(我经常发现的另一个是你无法if
在匿名函数中定义一个语句.这似乎是对Matlab语法的限制.
但是,一个非常简单的辅助函数可以实现这一点.
function varargout = get_outputs(fn, ixsOutputs)
output_cell = cell(1,max(ixsOutputs));
[output_cell{:}] = (fn());
varargout = output_cell(ixsOutputs);
Run Code Online (Sandbox Code Playgroud)
此函数接受函数句柄和输出索引数组,并返回索引输出.
如果您创建此文件(希望更好地评论)并将其放在您的路径上,那么您可以find
通过定义以下函数来访问函数的第二个输出
find_2nd = @(x)get_outputs(@()find(x),2)
Run Code Online (Sandbox Code Playgroud)
现在你可以找到找到等于1的数组的索引
>> find_2nd([4 3 2 1]==1)
ans =
4
Run Code Online (Sandbox Code Playgroud)
现在,您应该可以从匿名函数中随意访问备用输出参数.