在matlab中,是否可以将类的方法组织在subdirectories/subfolders的文件夹中?

In matlab, is it possible to put methods of classes organised in folders in subdirectories/subfolders?

我是 matlab 中 organising your classes in class folders 选项的新手。在可读性方面,我的代码受益于将 class 的方法放在单独的文件中,因为通常这些方法非常冗长。现在,我相信如果我能进一步组织我的代码会更好;我想在 class 文件夹 中创建子目录 。我要找的结构是这样的(只是一个例子):

@Foo/
├──Foo.m/
│
├──staticMethods/
│  ├──staticMethod1.m
│  ├──staticMethod2.m
│
├──privateMethods/
│  ├──privateMethod1.m

但是,我似乎无法在 class 文件夹中找到任何关于子文件夹的信息,当我尝试时它也不起作用,因为 matlab 似乎找不到文件夹 staticMethodsprivateMethods

因此我的问题是:在 matlab class 文件夹中,是否可以创建包含方法的子文件夹?

不,这是不可能的。仅在目录 Foo 本身中搜索 M 文件,不搜索其子目录。例外是名为 private 的子目录,它可以包含仅对其父目录 (documentation) 中的 M 文件可见的 M 文件函数。

Public 方法都必须直接在 Foo 目录中。私有方法可以在 private 子目录中。静态方法必须在 classdef 文件中定义。

一般来说,你的目录结构可以是这样的:

@Foo/
├──Foo.m
├──A.m
├──B.m
├──private/
│  ├──X.m
│  ├──Y.m

Foo.m 必须包含 class Fooclassdef 定义(或者,如果您使用 pre-classdef class,只是它的构造方法,尽管不推荐这样做)。 classdef 定义包含所有静态方法、setter 和 getter,以及任何需要特殊访问权限的方法。 函数 ABFoo 的 public 方法。 XYFoo.mA.mB.mX.mY.m 中的任何代码都可以访问的函数。


为了构造您的代码,您可以使用更长的函数并将它们拆分为私有子函数,只留下它在 classdef:

中的声明
classdef ClassName
   properties
      ...
   end
   methods
      function obj = C(obj,vararg)
         obj = C_internal(obj,vararg{:});
      end
   end

并在文件中 private/C_internal.m:

function obj = C_internal(obj,arg2,arg3,arg4,...)
   ...
end

(注意 vararg 的使用,它可以防止重复参数列表,重复的参数列表是引入错误的好方法。)

这里唯一的问题是文档仍然必须放在 Foo.m 中。我个人不喜欢将代码与文档分开,更喜欢将它们放在同一个文件中。