Как правильно назвать и организовать файловые классы для 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.