Main Content

inputname

函数输入的变量名称

说明

示例

s = inputname(argNumber) 返回与参数编号 argNumber 对应的工作区变量名称 s

您无法从 MATLAB® 命令提示符下或在您从命令提示符下调用的脚本中调用 inputname

示例

全部折叠

在您的当前工作文件夹下的 getname.m 文件中创建以下函数。

function getname(a,b)
s = inputname(1);
disp(['First calling variable is ''' s '''.'])
end

在命令提示符下使用变量 xy 调用该函数。

x = 5;
y = 3;
getname(x,y)
First calling variable is 'x'.

使用值(而不是变量)调用该函数。inputname 函数返回空 char 数组,因为其输入不包含名称。

getname(5,3)
First calling variable is ''.

在您的当前工作文件夹下的 getname2.m 文件中创建以下函数。

function getname2(a,b,c)
for m = 1:nargin
    disp(['Calling variable ' num2str(m) ' is ''' inputname(m) '''.'])
end

在命令提示符下调用该函数。

x = {'hello','goodbye'};
y = struct('a',42,'b',78);
z = rand(4);

getname2(x,y,z)
Calling variable 1 is 'x'.
Calling variable 2 is 'y'.
Calling variable 3 is 'z'.

使用 y 的一个字段调用该函数。因为输入参数包含点索引,对于第二个变量名称和所有后续变量名称,inputname 函数返回空 char 数组。

getname2(x,y.a,z)
Calling variable 1 is 'x'.
Calling variable 2 is ''.
Calling variable 3 is ''.

使用 x 的第二个元胞调用该函数。因为输入参数包含元胞索引,对于第一个变量名称和所有后续变量名称,inputname 函数返回空 char 数组。

getname2(x{2},y,z)
Calling variable 1 is ''.
Calling variable 2 is ''.
Calling variable 3 is ''.

输入参数

全部折叠

函数输入参数的编号,指定为标量、实数、正整数值。如果 argNumber 超出传递到函数的输入参数的数量,MATLAB 会引发错误。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

输出参数

全部折叠

工作区变量名称,以字符向量形式返回。如果输入参数没有名称,则 inputname 函数返回空字符数组 ('')。例如,如果输入参数是数字、表达式或索引表达式而不是变量,则它没有名称。

如果调用 inputname 的函数的输入参数包含元胞或点索引,则对于该变量和后续变量,inputname 会返回空字符数组。从元胞数组提取元素或从结构体提取字段会得到一个逗号分隔的列表。逗号分隔的列表会导致后面的任何输入的位置是动态的。因此,对于生成列表的参数和后续参数,inputname 会返回 ''

提示

  • 通过 inputname 可以方便地将输入变量的名称传递给函数。例如,函数检查输入的数据类型,如果它发现不正确的类型,会从您的工作区显示变量的名称。

  • 避免在代码的关键路径中使用 inputname,或用来获取变量名称以用于诸如以下的命令:evalevalinassignin。以这种方式使用 inputname 会导致代码难以维护。

  • 如果在重载的 subsrefsubsasgnsubsindexnumArgumentsFromSubscriptnumel、属性、set 或 get 方法内调用 inputname,它将返回错误。

  • inputname 无法获取向前执行索引操作中包含的参数的名称。相反,它返回空字符串。

  • 如果调用 inputname 的函数不是从 MATLAB 代码文件中调用的,inputname 将沿着堆栈向上走,直至找到来自 MATLAB 代码的调用,并返回在该处找到的名称。例如,如果从内置函数或 MEX 函数中调用 inputname,就会出现这种行为。

    请考虑以下代码,其中内置 arrayfun 函数通过函数句柄调用 inputname

    fn=@(x) inputname(x);
    a=1:4;
    arrayfun(fn,a,'uniformoutput',false)
    ans = 
    
        'fn'    'a'    ''    ''

    inputname 函数沿着堆栈向上走,直至找到来自 MATLAB 代码的调用。在这种情况下,MATLAB 代码是基础工作区,inputname 从该基础工作区返回变量名称。

扩展功能

版本历史记录

在 R2006a 之前推出

另请参阅

| |