Как получить дескриптор метода в объекте (экземпляр класса) в MATLAB - PullRequest
6 голосов
/ 02 октября 2011

Я пытаюсь получить дескриптор метода из объекта в MATLAB, но что-то вроде str2func ('obj.MethodName') не работает

Ответы [ 4 ]

6 голосов
/ 02 октября 2011

Ответ - получить дескриптор функции, как показало @ Пабло .

Обратите внимание, что ваш класс должен быть производным от класса 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

Теперь мы получаем дескриптор функции-члена и используем ее:

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

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

obj.say()
f()

Выход:

Hello there!
Hello there!

Однако, если мы определим его как Класс значений вместо этого (измените первую строку на classdef hello), результат будет другим:

Hello there!
Hello world!
6 голосов
/ 15 сентября 2012

Можно также написать

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

Это имеет то преимущество, что ему не требуется класс дескриптора, если объект (obj) изменен.

5 голосов
/ 02 октября 2011

Используйте @.У меня работает следующий код:

f = @obj.MethodName
0 голосов
/ 18 июня 2019

Нет другого ответа имитирует str2func('obj.MethodName'). На самом деле, это не так, не совсем. Но вы можете определить вспомогательную функцию следующим образом:

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

Затем method_handle(obj, 'MethodName') возвращает дескриптор на obj.MethodName. К сожалению, вы не можете передать имя переменной obj в виде строки - eval("obj") будет не определено в области действия функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...