Oop 如何在MATLAB中获取对象(类inst)中方法的句柄

Oop 如何在MATLAB中获取对象(类inst)中方法的句柄,oop,class,matlab,methods,Oop,Class,Matlab,Methods,我试图从MATLAB中的一个对象中获取一个方法句柄,但是str2func(“obj.MethodName”)中的某种东西不起作用使用@。以下代码适用于我: f = @obj.MethodName 答案是获得一个函数句柄,如图所示 请注意,您的类应该派生自句柄类,这样才能正常工作(以便通过引用传递对象) 考虑以下示例: 你好,m 输出: Hello there! Hello there! 但是,如果我们将其定义为一个(将第一行更改为classdef hello),则输出将不同: Hello t

我试图从MATLAB中的一个对象中获取一个方法句柄,但是str2func(“obj.MethodName”)中的某种东西不起作用

使用
@
。以下代码适用于我:

f = @obj.MethodName

答案是获得一个函数句柄,如图所示

请注意,您的类应该派生自
句柄
类,这样才能正常工作(以便通过引用传递对象)

考虑以下示例:

你好,m 输出:

Hello there!
Hello there!
但是,如果我们将其定义为一个(将第一行更改为
classdef hello
),则输出将不同:

Hello there!
Hello world!
你也可以写

fstr = 'say';
obj.(fstr)();

这样做的好处是,如果修改了对象(obj),它不需要句柄类就可以工作。

没有其他答案模仿str2func('obj.MethodName')。事实上,这个也不是,不完全是。但您可以这样定义一个辅助函数:

function handle = method_handle(obj, mstr)
    handle = @(varargin) obj.(mstr)(varargin{:});
end

然后
method\u句柄(obj,'MethodName')
将句柄返回到
obj.MethodName
。不幸的是,不能将变量名
obj
作为字符串传递-
eval(“obj”)
将在函数的作用域中未定义。

我现在意识到我可能跳过了问题的一个重要部分:我的目标是通过字符串(char数组)获取函数名,并运行它(例如,用于自动检测类中的可用函数)-这似乎通常有效,但在类中尤其有效,使用['obj.'functionName]运行feval,其中functionName是一些字符数组,未解析。提前感谢您是否考虑过使用类/对象。我在您之前的问题中发布了一个示例:
fstr = 'say';
obj.(fstr)();
function handle = method_handle(obj, mstr)
    handle = @(varargin) obj.(mstr)(varargin{:});
end