`localfunctions` внутри пакета
localfunctions возвращает дескрипторы функций для всех локальных функций в m-файле. Тем не менее, это не работает в пакете. Например, следующий код, сохраненный как "am", работает нормально:
function fs = a()
fs = localfunctions;
end
function babo()
end
function hidden()
end
Вызывается из консоли MATLAB:
>> a()
ans =
@babo
@hidden
Но когда он находится внутри пакета как '+aaa/b.m', я ничего не получаю:
>> aaa.b()
ans =
{}
Я не думаю, что это поведение хорошо документировано. Как мне преодолеть это? Мне нужно использовать localfunctions
для модульного тестирования некоторых функций в пакете, и я не хочу держать его вне пакета только из-за этого.
2 ответа
Одним из решений будет импортировать пакет перед вызовом localfunctions
:
+ Мойпакет /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'}
В R2013b и R2014a есть ошибка, когда localfunctions не учитывает пакет файла, содержащий локальные функции. Эта ошибка была передана в MathWorks для исправления в будущем выпуске.
До тех пор обходной путь Amro - лучший вариант.
РЕДАКТИРОВАТЬ: Это было исправлено в выпуске R2014b.