如何在Matlab类构造函数中获取输入函数句柄的函数名
解决Matlab类构造函数中获取函数句柄对应函数名的问题
问题原因
原代码里用inputname(1)拿不到目标函数名,是因为inputname的作用是获取调用时传入参数的变量名。当直接传@hello_world这种函数句柄(而非存储句柄的变量)时,没有对应的变量名,所以inputname返回的结果不符合预期。
构造函数内的解决方案
用Matlab内置函数func2str()就能直接把函数句柄转换成对应的函数名字符串,完全满足需求。修改后的代码如下:
classdef Task properties Name string end methods function this = Task(callback) arguments callback {isFunctionCallSignal} end this.Name = func2str(callback); end end end
执行task = Task(@hello_world)时,task.Name会被赋值为"hello_world",和预期一致。
特殊情况说明
- 如果传入的是匿名函数(比如
@(x)x+1),func2str()会返回完整的匿名函数定义字符串,这是正常行为;如果你的场景只涉及普通函数句柄,不需要额外处理。 - 只要
isFunctionCallSignal验证的是标准函数句柄类型,func2str()就能正常工作。
替代方案(若构造函数有特殊限制)
如果没法在构造函数里处理,可以给函数句柄属性加一个setter方法,设置或更新句柄时同步更新Name属性:
classdef Task properties Name string Callback function_handle % 新增存储句柄的属性 end methods function this = Task(callback) arguments callback {isFunctionCallSignal} end this.Callback = callback; end % 为Callback属性添加setter function set.Callback(this, value) arguments this Task value {isFunctionCallSignal} end this.Callback = value; this.Name = func2str(value); end end end
不管是构造时初始化,还是后续修改task.Callback,Name属性都会自动同步成对应的函数名。
内容的提问来源于stack exchange,提问作者chandler
相关产品推荐
相关产品推荐

