1

我和我的团队一段时间以来一直在研究多种工具流。

我们不断在同一文件中添加新程序或在同一目录中创建新文件。还有很多嵌套程序;一个人打电话给别人。

程序的数量只会越来越多,而且流程涉及至少10个热爱自己的事情的人。

我的问题是,我们将如何以整洁的方式管理所有这些程序?

4

2 回答 2

6

我们假设您遵循一般软件工程的良好实践(将文件保存在源代码管理中等),因为无论如何您都不会被困住。

Tcl 并不真正支持嵌套procs;您可以proc从另一个过程内部调用,但它不做任何类型的范围界定。


您应该考虑将代码划分为“连贯的 API”。究竟是什么取决于您的应用程序,但它很少是单个程序;一个特定的对话框或屏幕是一个更有用的单元。这可能最终成为一个过程,但通常是几个相关的过程。

一旦你确定了这些连贯的部分,它们就会形成你放入文件中的内容,通常每个文件一个连贯的部分,但如果你这样做时文件相当长,请改用一组文件(可能在他们的自己的目录)很有意义。同时,您可能应该让每个连贯部分定义的变量和命令都在一个 Tcl 命名空间中,这将部分与世界其他部分隔离开来,主要是为了防止代码踩到其他部分代码。

现在您已经完成了,并且如果您已经为您的连贯部分获得了您认为的稳定 API,那么您可以将该部分制作成一个 Tcl 包。这只是通过给它一个更高级别的名称和版本号来完成的;您将其放在连贯的文件中的一个文件中:

package provide YourPackageName 1.0

然后(通常在同一目录中)创建一个pkgIndex.tcl内容如下的文件:

package ifneeded YourPackageName 1.0 [list source [file join $dir yourFilename.tcl]]

也就是说,它说要在 Tcl 解释器中获取YourPackageName版本,你需要文件;这是包索引文件中的一个便利,它引用包含当前包索引文件的目录。然后你的其余代码可以停止思考“读取正确的文件”,并开始思考“使用这个定义的 API”。(如果您随后选择开始使用 Tcl 和 C 甚至纯 C 代码的混合代码来实现包,那就太好了;更改索引文件以使用正确的东西,其他一切都可以忽略不计。)它通过正在做:1.0source$dir/yourFilename.tcl$dirload

package require YourPackageName
# Give the version if necessary, of course

然后为自己编写一些文档(即使它只是将入口点命令列出到包中)和测试,你已经迁移到了一个行为非常好的代码片段。


在某些情况下,有一些额外的技术可以帮助您制作连贯的作品。特别是,如果您使用的是像 TclOO、iTcl 或 XOTcl 这样的 OO 系统,则几乎可以肯定每个类都是候选的连贯部分。此外,有时最好将几个相关的连贯部分放在一个包中。但是,对此绝对没有硬性规定。

最后,Tcl 使用了一堆技术来查找包,但它们大多归结为使用auto_path全局变量来查找。在您的应用程序主脚本中,最好(如果您的其余代码大部分都在library目录中)使用这样的东西作为第一步:

lappend auto_path [file join [file dirname [info script]] library]

您还可以pkgIndex.tcl在一个地方收集许多文件的内容,前提是您考虑到移动内容所需的任何路径名更改。

于 2016-10-24T09:30:11.533 回答
1

所以关于 TCL,你可以寻找创建包和命名空间。让我知道这是否有帮助。所以可以提供更多细节

于 2016-10-24T07:19:38.663 回答