Как правильно назвать и организовать файловые классы для MATLAB?

Рассмотрим следующую структуру каталогов и C:\magic текущая папка MATLAB:

C:\magic
C:\magic\+wand
C:\magic\+hat

Сейчас, wand а также hat пакеты MATLAB, которые могут быть загружены import wand.* а также import hat.*,

Учтите, что я могу захотеть создать абстрактный класс для шляпы внутри +hat папка:

% C:\magic\+hat\Hat.m
classdef Hat < handle
    % class implementation ...
end

и какой-то детский класс:

% C:\magic\+hat\TopHat.m
classdef (Sealed) TopHat < Hat
    % class implementation
    methods
        function this = TopHat()
            this = this@Hat();
        end
    end
end

Но, когда я делаю:

> import hat.*
> ha = TopHat()

Я получаю следующую ошибку:

Error using hat.TopHat
The specified superclass 'Hat' contains a parse error or cannot be found
on MATLAB's search path, possibly shadowed by another file with the same name.

Тем не менее, я могу сделать ha = Hat() без ошибок.

Что, возможно, происходит и как лучше всего решить эту проблему?

Заранее спасибо!

1 ответ

Решение

Пытаться

classdef (Sealed) TopHat < hat.Hat

В MATLAB нет подпрограммы "search-current-package-first" (извините за плохое имя:>). Таким образом, чтобы ссылаться на класс в пакете, вы всегда должны нести имя пакета - даже, например, чтобы ссылаться на статический метод класса в его собственной classdef.

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