2012-03-20 11 views
31

¿Cuál es el significado de los siguientes nombres de carpeta en MATLAB?@carpeta y + carpeta

  • @folder
  • +folder

He creado una clase Tata.m que utiliza la sintaxis classdef. ¿Debo ponerlo en un @folder o un +folder?

He mirado en la documentación pero no es realmente claro casos en los que la @folder se deben utilizar y en qué casos la +folder deben ser utilizados.

Respuesta

34

La pieza +folder es una carpeta de paquete MATLAB. Si coloca Tata.m en una ubicación como +folder/Tata.m, MATLAB conocerá la clase folder.Tata. Si lo coloca en una carpeta como someOtherFolder/Tata.m o someOtherFolder/@Tata/Tata.m, MATLAB lo conocerá como Tata.

Puede ser útil colocar un archivo classdef en un directorio de clase como @Tata para permitirle poner la definición de algunos (o todos) los métodos en archivos separados.

El doc tiene más detalles.

EDIT: Para tratar de aclarar las @ directorios: históricamente, una clase Tata con métodos methodOne y methodTwo requeriría los siguientes archivos:

somePlaceOnThePath/@Tata/Tata.m 
somePlaceOnThePath/@Tata/methodOne.m 
somePlaceOnThePath/@Tata/methodTwo.m 

En el "nuevo" sistema de objetos, puede seguir utilizando el diseño anterior sin modificación. En el otro extremo, se puede colocar toda la implementación de Tata en un solo classdef bloque en:

somePlaceOnThePath/Tata.m 

Si usted tiene algunos métodos grandes, o si desea dividir la implementación de la clase Tata en varios archivos para hacer desarrollo paralelo simple, se puede tomar utilizar un classdef así:

%# somePlaceOnThePath/@Tata/Tata.m: 
classdef Tata 
    methods 
     result = methodTwo(obj, arg) 

     function methodOne(obj) 
      disp('hello from methodOne'); 
     end 
    end 
end 

Y también

%# somePlaceOnThePath/@Tata/methodTwo.m: 
function result = methodTwo(obj, arg) 
% do stuff with obj and arg 
end 

Estrictamente hablando, la declaración anticipada de methodTwo en el classdef es opcional porque está usando los especificadores de acceso predeterminados. Si desea que methodTwo sea un método privado, puede colocarlo en un bloque methods (Access = private).

+2

bien, gracias Edric, ahora, entiendo la carpeta + pero no la @carpeta – lola

+0

El enlace de la documentación está roto y no puedo entender qué se suponía que era. También sigo luchando por comprender el significado y la importancia de una "carpeta de paquete MATLAB". – patrickvacek

+0

Hm, tampoco estoy 100% seguro ahora, tal vez estaba destinado a ser http://www.mathworks.com/help/matlab/matlab_oop/scoping-classes-with-packages.html o http: // www .mathworks.com/help/matlab/matlab_oop/organizing-classes-in-folders.html – Edric

Cuestiones relacionadas