![]() |
1
42
港口到纽比。 (开玩笑) 通常在Matlab中,有些文件是作为函数编写的,有些是作为脚本编写的。脚本做一些事情,比如加载您想要处理的数据,并将其提供给函数,并绘制图表。 为了组织工作,我将从顶层脚本开始,找出哪些函数执行加载、绘图、处理等操作。将脚本保存在顶层目录中,并根据函数的用途,尝试将这些函数分离到子目录中。将函数的依赖项放入同一子目录中。尝试使目录中的代码不依赖于父目录(或堂兄弟目录)中的任何内容。 每当你弄清楚一个函数做什么和它的参数是什么时,写一个doc注释。 这假设编写代码的人是合理的。如果不是这样,Matlab可以很容易地将所有内容都放到一个目录中,并使所有内容都依赖于一个摇摇欲坠的代码塔中的其他内容,因此您可能最终会进行大量重构。 |
![]() |
2
14
你的代码有合适的帮助文本吗?在这种情况下, m2html 这将是一个很好的帮助,因为它允许您创建链接的HTML帮助,方便浏览。 此外,它还允许您生成依赖关系图,这有助于您进一步了解如何组织代码。 |
![]() |
3
13
我在MathWorks的各种工作中,不得不多次处理这个问题。这就是我为大量的Matlab代码所做的:
~~~和/或~~~ 5如果我觉得幸运,开始在调试器中运行代码,逐步完成 一次一行(进入用户编写的子函数) 在这一点上,我可以通过一个典型的流程来控制结构。我可能不知道每件事都做些什么,但我对正在发生的事情有一个很好的想法。 通常,我的目标是找到一个bug,解决它并继续前进。你的目标可能完全不同。这是我用来快速理解我多年来发送的大量不同的Matlab代码的方法。 |
![]() |
4
7
MATLAB Programming Style Guidelines 理查德约翰逊是一个很好的资源。 |
![]() |
5
7
关于Matlab编码约定的几点建议:
|
![]() |
6
3
我同意大多数关于Matlab不太支持现代软件源代码结构的评论,但是我不认为用一点规则来强制使用你自己的结构太难了。 将源文件组织到一个目录层次结构中,就像用另一种编程语言编写的任何程序的源文件一样。你不需要坚持等级制度,如果你愿意的话,选择你自己的结构。使用setpath命令(或者不管它叫什么)告诉Matlab在工作时在哪里查找M文件。 熟悉MatlabProfiler工具,它可以给你提供调用图(不是非常图形化,更像是GProf的调用图),这有助于破译意大利面代码。 当然,我们所有的m文件都在存储库中,我们从中服务它们。我们在一个网络驱动器上保留了一个专用工具箱,所有用户都可以直接调用工具箱中的“已发布”代码。 |
![]() |
7
3
备份一切正常。创建原始源代码树的原始tarball,然后将其全部放入源代码管理中,以便跟踪和回滚更改。 看看Matlab的depfun()和depdir(),它们检测静态依赖项。它可以帮助您了解Matlab函数之间的依赖关系。使用所有文件上的“depfun-topoly”和少量的字符串咀嚼,您可以构建一个立即依赖项列表,并将其放入graphviz文件中,以生成代码库调用连接的大有向图。图中的集群可能是划分代码的好地方。(编辑:请参阅jonas的解决方案;看起来m2html是为您这样做的。) 如果您有很大的自由重写代码,可以考虑将一些代码重写为对象,使用带有类方法和私有函数的无状态实用程序类作为将相关函数打包在一起并提供一些封装的方法。我用这种方式组织了大量的Matlab代码库,它工作得很好。在经典的Matlab中,类是执行某种程序包的唯一方法。我相信Matlab新的OO系统也支持名称空间。 如果不想将代码转换为oo,可以在子目录中组织相关函数。这至少有助于组织源代码浏览。 所有函数都应该有一些标准帮助文本格式的doco,包括h1行。如果他们没有,就把你在那里学到的东西贴上评论。然后使用“contentsrpt”工具自动生成类或目录的目录文件。 祝你好运。 |
![]() |
Glory Raj · 有什么方法可以使这两个块具有共同的功能吗 2 年前 |
![]() |
Justin · Python自属性重命名 7 年前 |
![]() |
Sabutobi · 长dict属性行的重构 7 年前 |
![]() |
Falco Alexander · 简单LINQ重构/样式 7 年前 |
|
05bs001 · Euler 12需要优化 7 年前 |
![]() |
slartidan · 如何将lambda表达式重构为方法引用? 7 年前 |
|
Alex · 在Java类中频繁使用与映射键相同的字符串[已关闭] 7 年前 |