如何在MATLAB中获取Object(class inst)中方法的句柄

Ala*_*ban 6 oop methods matlab class

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

Amr*_*mro 6

答案是获得@Pablo所示的函数句柄.

请注意,您的类应该从handle类中派生,以使其正常工作(以便通过引用传递对象).

请考虑以下示例:

Hello.m

classdef hello < handle
    properties
        name = '';
    end
    methods
        function this = hello()
            this.name = 'world';
        end
        function say(this)
            fprintf('Hello %s!\n', this.name);
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

现在我们获得成员函数的句柄,并使用它:

obj = hello();         %# create object
f = @obj.say;          %# get handle to function

obj.name = 'there';    %# change object state

obj.say()
f()
Run Code Online (Sandbox Code Playgroud)

输出:

Hello there!
Hello there!
Run Code Online (Sandbox Code Playgroud)

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

Hello there!
Hello world!
Run Code Online (Sandbox Code Playgroud)


小智 6

人们也可以写

fstr = 'say';
obj.(fstr)();
Run Code Online (Sandbox Code Playgroud)

这具有以下优点:如果修改了对象(obj),则不需要句柄类.


Pab*_*blo 5

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

f = @obj.MethodName
Run Code Online (Sandbox Code Playgroud)