首页 > 解决方案 > 类文件夹中的打包文件夹

问题描述

在 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 使用的包系统保持清晰方法(以及从哪里)。

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

标签: matlaboop

解决方案


您应该将这些私有实现文件放在子目录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 文件中。这是将代码保持在一起的更好方法。


推荐阅读