2

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

function fs = a()
    fs = localfunctions;
end

function babo()
end

function hidden()
end

从 MATLAB 控制台调用:

>> a()

ans = 

    @babo  
    @hidden

但是当它作为'+aaa/bm'在一个包中时,我什么也得不到:

>> aaa.b()

ans = 

     {}

我不认为这种行为有据可查。我该如何克服呢?我需要使用localfunctions对包中的某些功能进行单元测试,并且我不想仅仅因为这个而将其保留在包之外。

4

2 回答 2

3

一种解决方案是在调用之前导入包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'}
于 2014-08-27T16:29:01.410 回答
2

R2013b 和 R2014a 中存在一个错误,其中 localfunctions 不尊重包含本地函数的文件的包。此错误已报告给 The MathWorks,以便在未来的版本中修复。

在此之前,Amro 的解决方法是最佳选择。

编辑:这已在 R2014b 版本中修复。

于 2014-08-28T13:33:53.820 回答