@folder и + папка

Что означают следующие имена папок в MATLAB?

  • @folder
  • +folder

Я создал класс Tata.m который использует classdef синтаксис. Должен ли я положить его в @folder или +folder?

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

1 ответ

+folder piece это папка пакета MATLAB. Если вы разместите Tata.m в таком месте, как +folder/Tata.m, это будет известно MATLAB как класс folder.Tata, Если вы поместите его в папку, как someOtherFolder/Tata.m, или же someOtherFolder/@Tata/Tata.m, это будет известно MATLAB как Tata,

Это может быть полезно разместить classdef файл в каталоге класса, как @Tata чтобы позволить вам поместить определение некоторых (или всех) методов в отдельных файлах.

У документа есть больше деталей.

РЕДАКТИРОВАТЬ: Чтобы попытаться уточнить @ справочники: исторически, класс 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) блок.

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