2012-03-20 4 views
31

В чем смысл следующих имен папок в MATLAB?@ папка и + папка

  • @folder
  • +folder

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

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

ответ

34

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

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

doc имеет более подробную информацию.

EDIT: Для того, чтобы попытаться прояснить @ каталоги: исторически, класс 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).

+2

ОК, спасибо Эдрику, теперь я понимаю папку +, но не @folder – lola

+0

Ссылка на документацию сломана, и я не могу понять, что она должна была быть. Я также все еще пытаюсь понять смысл и значение «папки пакета MATLAB». – patrickvacek

+0

Хм, теперь я не уверен на 100%, возможно, это должно было быть http://www.mathworks.com/help/matlab/matlab_oop/scoping-classes-with-packages.html или http: // www .mathworks.com/помощь/Matlab/matlab_oop/организующие-классы-в-folders.html – Edric