localfunctions将函数句柄返回到m文件中的所有本地函数。但是,这在软件包中不起作用。例如,以下保存为“a.m”的代码运行良好:

function fs = a()
    fs = localfunctions;
end

function babo()
end

function hidden()
end

从MATLAB控制台调用:
>> a()

ans =

    @babo
    @hidden

但是,当它以'+ aaa / b.m'的形式存在于软件包中时,我什么也没得到:
>> aaa.b()

ans =

     {}

我不认为这种行为有据可查。我该如何克服?
我需要在包中使用localfunctionsunit test一些函数,而我不想仅因为这个原因就将其保留在包之外。

最佳答案

一种解决方案是在调用localfunctions之前导入包:

+ mypkg / mytest.m

function f = mytest()
    import mypkg.*
    f = localfunctions;
end

function foo()
end

function bar()
end

调用时:
>> f = mypkg.mytest()
f =
    @foo
    @bar

>> functions(f{1})
ans =
     function: 'foo'
         type: 'scopedfunction'
         file: 'C:\Users\Amro\Desktop\+mypkg\mytest.m'
    parentage: {'foo'  'mytest'}

08-16 16:50