包文件夹在类文件夹中

时间:2018-11-18 20:12:05

标签: matlab oop

在MATLAB中,类文件夹用foo/@bar/表示,包文件夹用foo/+bar表示。在我的层次结构中,我有一些类在不同的文件中定义方法,因此@bar/约定对于包含它们的文件夹是必需的。但是,我也有一些方法,它们的实现有些复杂,并且希望使用+bar/约定将它们打包到...好,就像这样:

foo/@classfolder/MyClass.m
foo/@classfolder/method1.m
foo/@classfolder/method2.m
foo/@classfolder/+othermethodstuff/method2helper.m
foo/@classfolder/+othermethodstuff/mexmethod_formethod2helper.m
foo/@classfolder/+othermethodstuff/mexfiles/

我想这样做是因为在我的实际代码中用method2.m表示的方法依赖于MEX文件的大量计算,而我更希望将它们存放在自己的文件夹中,并使用MATLAB使用的软件包系统在调用这些方法(以及从何处)时要保持清楚。

这可能吗?如果不是,我唯一的选择是放弃@类文件夹约定并将所有内容粘贴到程序包(+)文件夹中吗?

1 个答案:

答案 0 :(得分:4)

您应将这些私有实现文件放在子目录private中。那是他们的传统住所。如果要创建一些明显的层次结构来组织代码,建议使用长文件名。

例如:

foo/@classfolder/MyClass.m
foo/@classfolder/method1.m
foo/@classfolder/method2.m
foo/@classfolder/private/physicssimulation_function1.m
foo/@classfolder/private/physicssimulation_function2.m
foo/@classfolder/private/physicssimulation_mexfile.mex
foo/@classfolder/private/uihelper_functionA.m
foo/@classfolder/private/uihelper_functionB.m
可以从@classfolder目录中的任何函数调用

私有目录中的M文件和MEX文件,就像它们在路径上一样(即,调用时您不使用private他们)。但是它们是该目录专用的,并且从外部看不到。

以上建议假定多个类方法使用相同的私有功能。如果只有一种方法使用physicssimulation,则其所有功能都应在该方法的M文件中。这是将代码保持在一起的更好方法。