You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 09:35:15