Pregunta carpeta @folder y +


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

  • @folder
  • +folder

Creé una clase Tata.m que usa el classdef sintaxis. Debería ponerlo en una @folder o una +folder?

Miré la documentación, pero no está muy claro en qué casos el @folder debe utilizarse y en qué casos el +folder debería ser usado.


32
2018-03-20 05:42


origen


Respuestas:


los +folder pieza es una carpeta de paquete MATLAB. Si colocas Tata.m en un lugar como +folder/Tata.m, será conocido por MATLAB como la clase folder.Tata. Si lo colocas en una carpeta como someOtherFolder/Tata.m, o someOtherFolder/@Tata/Tata.m, será conocido por MATLAB como Tata.

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

los doc tiene mas detalles

EDITAR: para intentar aclarar el @ 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, aún puede usar el diseño anterior sin modificaciones. En el otro extremo, puede colocar toda la implementación de Tata en un solo classdef bosquejar:

somePlaceOnThePath/Tata.m

Si tiene algunos métodos grandes, o quiere dividir la implementación de la clase Tata en varios archivos para simplificar el desarrollo paralelo, puede usar un classdef como este:

%# 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 quisieras tener methodTwo ser un método privado, podrías colocarlo en una methods (Access = private) bloquear.


35
2018-03-20 07:16