2014-09-29 4 views
1

Я работаю над пакетом для октавы и что-то странное происходит. В функции Foo для класса А я сделать рекурсивный вызов с помощью cellfun так:Подфункции и частные функции

... cellfun(@(d) foo(d,localval), cellarray) ... 

Теперь функция Foo определяется для нескольких различных классов. Я ранее использовал эту практику успешно. Разница на этот раз в том, что, в классе B, Foo делает использование двух подфункций и функций частного к классу В. Это приводит к тому, выше вызову приведет к следующей ошибке:

error: 'subfunction2' undefined near line 29 column 6 
error: called from: 
error: /usr/share/octave/packages/mypkg/@B/foo.m at line -1, column -1 

Я попытался изменить порядок в которых подфункции перечислены в файле функций для @ B/foo и подтвердили, что он находит первую подфункцию, но не вторую. Я также попытался сделать частные подфункции классом B, и проблема не исчезла.

Итак, мой вопрос: что здесь происходит? Это использование cellfun? Анонимная функция? Почему он улавливает одну подфункцию foo, но не две? Классы объектов? Что происходит с сообщением о строке/столбце -1? Мне бы очень хотелось скрыть эти вспомогательные функции от пользователя, поэтому я предпочел бы что-то другое, кроме как отбросить подфункции в общедоступном пути.

ответ

0

Проблема решена. Это совсем не то, что мой вопрос сделал. Оказывается, у меня было открытое if-заявление (т. Е. Нет endif) в одной из подфункций. Я обнаружил это, когда я переместил две подфункции в свои собственные файлы функций и поместил эти файлы в общий каталог в пакете. Вызов функции здесь вызвал ошибку синтаксического анализа для запуска.

Таким образом, будет запрограммирован Октавный программист. Синтаксические ошибки в подфункциях приводят к непредвиденным сообщениям об ошибках. В этом случае система, казалось, просто игнорировала ошибочную функцию и продолжала без ее определения. Это, в свою очередь, приводит к неопределенной функциональной ошибке.

Смежные вопросы