@folder и + папка - PullRequest
       11

@folder и + папка

33 голосов
/ 20 марта 2012

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

  • @folder
  • +folder

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

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

1 Ответ

37 голосов
/ 20 марта 2012

+folder - это папка пакета 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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...