В чем смысл следующих имен папок в MATLAB?
@folder
+folder
Я создал класс Tata.m
, который использует синтаксис classdef
.
Должен ли я помещать его в @folder
или +folder
?
Я просмотрел документацию, но это не совсем понятно
в каких случаях следует использовать @folder
и в каких случаях следует использовать +folder
.
Часть +folder
- это папка пакета MATLAB. Если вы поместите Tata.m
в такое место, как +folder/Tata.m
, он будет известен MATLAB как класс folder.Tata
. Если вы поместите его в папку типа someOtherFolder/Tata.m
или someOtherFolder/@Tata/Tata.m
, он будет известен MATLAB как Tata
.
Может быть полезно поместить файл classdef
в каталог класса, например @Tata
, чтобы вы могли поместить определение некоторых (или всех) методов в отдельные файлы.
doc содержит более подробную информацию.
РЕДАКТИРОВАТЬ: Чтобы попытаться прояснить каталоги @
: исторически для класса Tata
с методами methodOne
и methodTwo
требуются следующие файлы:
somePlaceOnThePath/@Tata/Tata.m
somePlaceOnThePath/@Tata/methodOne.m
somePlaceOnThePath/@Tata/methodTwo.m
В "новой" объектной системе вы все равно можете использовать макет выше без изменений. С другой стороны, вы можете разместить всю реализацию Tata
в одном блоке classdef
в:
somePlaceOnThePath/Tata.m
Если у вас есть несколько больших методов или вы хотите разбить реализацию класса Tata
на несколько файлов, чтобы упростить параллельную разработку, вы можете использовать classdef следующим образом:
%# somePlaceOnThePath/@Tata/Tata.m:
classdef Tata
methods
result = methodTwo(obj, arg)
function methodOne(obj)
disp('hello from methodOne');
end
end
end
А также
%# somePlaceOnThePath/@Tata/methodTwo.m:
function result = methodTwo(obj, arg)
% do stuff with obj and arg
end
Строго говоря, предварительное объявление methodTwo
в classdef
является необязательным, поскольку оно использует спецификаторы доступа по умолчанию. Если вы хотите, чтобы methodTwo
был приватным методом, вы можете поместить его в блок methods (Access = private)
.