如何在MATLAB中获取匿名函数的参数名称?
获取MATLAB匿名函数的参数名称
确实,MATLAB没有直接返回匿名函数参数名称的内置函数——我之前折腾functions()命令的时候也发现它根本不包含这部分信息。不过我们有两种实用的方法来实现需求,下面一步步说:
方法1:解析函数的字符串表示(最常用)
这是最简单直接的方案,利用func2str()把匿名函数转换成字符串,再用正则表达式提取括号里的参数名。
举个你的例子:
% 定义匿名函数 f = @(x, y) x^2 + y^2; % 转成字符串 func_str = func2str(f); % 用正则匹配@(...)里的参数部分 param_match = regexp(func_str, '@\((.*?)\)', 'tokens'); % 分割参数并去除多余空格 param_names = strsplit(param_match{1}{1}, ','); param_names = strtrim(param_names);
运行后param_names就是{'x', 'y'},完美符合需求。这个方法对大多数场景都适用,哪怕参数之间有没有空格都能处理。
方法2:利用底层元数据(进阶)
如果担心字符串解析的可靠性(比如极端情况下函数字符串被修改),可以通过MATLAB的元数据工具来获取。不过这个方法相对复杂,一般场景下方法1足够用了,这里给出示例供参考:
f = @(x, y) x^2 + y^2; % 获取函数的元信息结构体 func_info = functions(f); % 通过函数句柄的工作区获取参数名(依赖MATLAB的内部实现,版本可能有差异) param_names = evalin(func_info.workspace, 'inputnames');
注意:这个方法依赖MATLAB的内部工作机制,不同版本可能会有变化,所以优先推荐方法1。
总结一下:MATLAB没有专门的内置函数干这件事,所以解析字符串是最稳妥、易维护的方案。
内容的提问来源于stack exchange,提问作者Sigfrid Stjärnholm
相关产品推荐
相关产品推荐

