`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.

Другие вопросы по тегам