-1

我知道自定义函数输出使用命令myfun传递给它的变量名称。inputname

但是,当我通过 a 传递变量时cellfuninputname命令停止工作,如下所示(我在其中传递变量名称jlatlon。在这里,它只是以某种方式将所有变量输出为“x”。

>> cellfun(@(x)myfun(x, y), {j, lat, lon}, 'UniformOutput', false)

First calling variable is "x".
First calling variable is "x".
First calling variable is "x".

ans = 
    'x'    'x'    'x'

如果我尝试:

cellfun(@myfun, {j}, 'UniformOutput', false)

我得到:

First calling variable is "".

ans = 
    {''}

我这样做是因为我正在使用一个函数创建一堆图,并且希望所有图都自动标记有我传递到图中的变量的变量名称。

4

1 回答 1

0

inputname在这种情况下,您会失去传递的变量名称和之间的联系。我看到的唯一解决方案是将变量的名称作为附加参数发送到myfun. 您需要使用这样的单独函数提取名称:

function [values, names] = getNames(varargin)
values = varargin;
names = cell(size(varargin));
for iArg = 1:nargin
    names{iArg} = inputname(iArg);
end
end

那么你的代码应该是这样的

[values, names] = getNames(j,lat,lon);
cellfun(@(x,n)myfun(x,y,n),values,names,'UniformOutput',false);

现在传递给的第三个参数myfun包含其第一个参数的名称。 更新:这意味着您需要编辑myfun以接受第三个参数作为变量的名称,而不是使用inputname.

于 2013-09-16T06:42:44.077 回答