包内的`localfunctions`

时间:2014-08-27 16:13:34

标签: matlab unit-testing packages function-handle

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一些函数,我不想因为这个而将它保留在包之外。

2 个答案:

答案 0 :(得分: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'}

答案 1 :(得分:2)

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

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

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