MATLAB:嵌套函数的函数句柄

时间:2014-01-23 04:33:33

标签: matlab function-handle

有没有办法为包含函数句柄中的父函数的嵌套函数创建函数句柄?

举个例子,说我有:

function myP = myParent()

    myP.My_Method = myMethod;

    function myMethod()
        disp "hello world"
    end
end

在另一个文件中,我可以通过执行以下操作来调用该方法:

myP = myParent();
myP.My_Method();

但是,如果我有另一个函数将函数句柄作为参数然后调用该函数,在这种情况下如何将函数句柄传递给myMethod,因为这个新函数不能创建一个myParent变量。

1 个答案:

答案 0 :(得分:3)

以下似乎有效:

function myP = myParent()

    myP.My_Method = @myMethod;

    function myMethod()
        s=dbstack;
        fprintf('Hello from %s!\n',s(1).name);
    end
end

按如下方式运行:

>> myP = myParent()
myP = 
    My_Method: @myParent/myMethod
>> feval(myP.My_Method)
Hello from myParent/myMethod!
>> myP.My_Method()
Hello from myParent/myMethod!

从另一个函数运行它也很好:

% newfun.m
function newfun(hfun)
feval(hfun)

测试:

>> newfun(myP.My_Method)
Hello from myParent/myMethod!

根据您的工作情况,这应该足够了。请注意,您创建的每个句柄都是唯一的,因为it contains information about externally scoped variables(父项中提取的变量):

  

为嵌套函数创建函数句柄时,该句柄不仅存储函数的名称,还存储外部作用域变量的值。