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 =
{}
我不认为这种行为有很好的记录。我该如何克服这个问题?
我需要在包中使用localfunctions
到unit test一些函数,我不想因为这个而将它保留在包之外。
答案 0 :(得分:3)
一种解决方案是在调用localfunctions
之前导入包:
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版本中修复。