После обнаружения @ gnovice:
>> obj = struct('instance', SomeClass());
>> hdl = @obj.instance.SomeMethod
hdl =
function_handle with value:
@obj.instance.SomeMethod
>> hdl(obj.instance)
Undefined function or variable 'obj.instance.SomeMethod'.
>> hdl()
Undefined function or variable 'obj.instance.SomeMethod'.
Но:
>> instance=SomeClass();
>> hdl = @instance.SomeMethod
hdl =
function_handle with value:
@(varargin)instance.SomeMethod(varargin{:})
>> hdl(instance)
Error using SomeClass/SomeMethod
Too many input arguments.
Error in @(varargin)instance.SomeMethod(varargin{:})
>> hdl()
in!
Обратите внимание, что дескриптор функции, созданный во втором случае, на самом деле является анонимной функцией, которая включает в себя объект,Это особый случай оператора @
, а не обычное использование:
>> hdl=@SomeMethod
hdl =
function_handle with value:
@SomeMethod
>> hdl(instance)
in!
На самом деле этот случай создает анонимную функцию, которая встраивает объект, который вы намереваетесь вызвать этим методомна.Вы можете создать такую функцию следующим образом:
>> hdl=@()obj.instance.SomeMethod()
hdl =
function_handle with value:
@()obj.instance.SomeMethod()
>> hdl()
in!