在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 似乎找不到文件夹 staticMethods
和 privateMethods
。
因此我的问题是:在 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 Foo
的 classdef
定义(或者,如果您使用 pre-classdef class,只是它的构造方法,尽管不推荐这样做)。 classdef
定义包含所有静态方法、setter 和 getter,以及任何需要特殊访问权限的方法。
函数 A
和 B
是 Foo
的 public 方法。 X
和 Y
是 Foo.m
、A.m
、B.m
、X.m
和 Y.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
中。我个人不喜欢将代码与文档分开,更喜欢将它们放在同一个文件中。
我是 matlab 中 organising your classes in class folders 选项的新手。在可读性方面,我的代码受益于将 class 的方法放在单独的文件中,因为通常这些方法非常冗长。现在,我相信如果我能进一步组织我的代码会更好;我想在 class 文件夹 中创建子目录 。我要找的结构是这样的(只是一个例子):
@Foo/
├──Foo.m/
│
├──staticMethods/
│ ├──staticMethod1.m
│ ├──staticMethod2.m
│
├──privateMethods/
│ ├──privateMethod1.m
但是,我似乎无法在 class 文件夹中找到任何关于子文件夹的信息,当我尝试时它也不起作用,因为 matlab 似乎找不到文件夹 staticMethods
和 privateMethods
。
因此我的问题是:在 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 Foo
的 classdef
定义(或者,如果您使用 pre-classdef class,只是它的构造方法,尽管不推荐这样做)。 classdef
定义包含所有静态方法、setter 和 getter,以及任何需要特殊访问权限的方法。
函数 A
和 B
是 Foo
的 public 方法。 X
和 Y
是 Foo.m
、A.m
、B.m
、X.m
和 Y.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
中。我个人不喜欢将代码与文档分开,更喜欢将它们放在同一个文件中。