在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使用的软件包系统在调用这些方法(以及从何处)时要保持清楚。
这可能吗?如果不是,我唯一的选择是放弃@
类文件夹约定并将所有内容粘贴到程序包(+
)文件夹中吗?
答案 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文件中。这是将代码保持在一起的更好方法。