在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使用的包系统在我调用这些方法时(以及从何处(保持清晰。
这可能吗?如果不是,我唯一的其他选择是放弃@
类文件夹约定并将所有内容粘贴到包(+
(文件夹中吗?
您应该将这些私有实现文件放在子目录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
私有目录中的M文件和MEX文件可以从@classfolder
目录中的任何函数调用,就好像它们在路径上一样(即调用它们时不使用private
(。但它们对该目录是私有的,从外部看不到。
上面的建议假设多个类方法使用相同的私有功能。如果只有一个方法使用physicssimulation
,那么它的所有函数都应该在该方法的M文件中。这是将代码组合在一起的更好方法。