Oop 如何在MATLAB中获取对象(类inst)中方法的句柄
我试图从MATLAB中的一个对象中获取一个方法句柄,但是str2func(“obj.MethodName”)中的某种东西不起作用使用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
@
。以下代码适用于我:
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