@folder and +folder

36
以下是MATLAB中以下文件夹名称的含义:
  • @folder:用于定义类和其方法的私有文件夹。
  • +folder:用于包含与类相关的函数的包文件夹。
对于使用classdef语法创建的类Tata.m,应将其放置在+folder中,因为它包含与类相关的函数。关于何时使用@folder和何时使用+folder的情况,文档并不十分清晰。
1个回答

41
+folder是MATLAB包文件夹。如果您将Tata.m放在类似于+folder/Tata.m的位置,MATLAB将把它识别为folder.Tata类。如果您将其放在像someOtherFolder/Tata.msomeOtherFolder/@Tata/Tata.m这样的文件夹中,MATLAB将把它识别为Tata
在类目录中(如@Tata)放置一个classdef文件可能很有用,以允许您将一些(或所有)方法的定义分别放在不同的文件中。 doc提供了更多详细信息。
编辑:为了澄清@目录:历史上,具有methodOnemethodTwo方法的Tata类需要以下文件:
somePlaceOnThePath/@Tata/Tata.m
somePlaceOnThePath/@Tata/methodOne.m
somePlaceOnThePath/@Tata/methodTwo.m
在“新”的对象系统中,您仍然可以在不进行修改的情况下使用上述布局。在另一个极端,您可以将整个 Tata 的实现放在单个 classdef 块中:

在“新”的对象系统中,即使没有进行修改也可以使用上述布局。在另一方面,您可以将整个 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

严格来说,在 classdef 中提前声明 methodTwo 是可选的,因为它使用默认的访问特定符。如果你想要将 methodTwo 设为私有方法,你可以将它放在 methods (Access = private) 块中。


2
好的,谢谢 Edric,现在我明白了 +folder 但不明白 @folder。 - lola
文档链接已经失效,我无法弄清楚它原本应该是什么。我还在努力理解“MATLAB包文件夹”的含义和重要性。 - pattivacek
嗯,我现在也不是100%确定,也许它的意思是http://www.mathworks.com/help/matlab/matlab_oop/scoping-classes-with-packages.html或者http://www.mathworks.com/help/matlab/matlab_oop/organizing-classes-in-folders.html。 - Edric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接