Tcl 我们可以在不同的名称空间中有多个同名的包吗?

Tcl 我们可以在不同的名称空间中有多个同名的包吗?,tcl,Tcl,与其他语言相比,我对TCL的包和名称空间概念感到困惑 有人能澄清我的问题吗?我们可以在不同的名称空间中有多个名称相同的包吗?将问题中的“have”解释为“use”,答案是否定的。包机制在数据库中查找每个包名称都是唯一的包。将Foo包中的内容放在名称空间Foo中是一种有用的约定,但是名称空间对包查找没有影响。也就是说,我相信可以将不同版本的包放在不同的名称空间中,但一次只能使用一个版本。解释器中一次只能有一个版本的包。包由其名称标识,这完全独立于它们使用的名称空间。你可以在同一个过程中将不同的版本

与其他语言相比,我对TCL的包和名称空间概念感到困惑


有人能澄清我的问题吗?我们可以在不同的名称空间中有多个名称相同的包吗?

将问题中的“have”解释为“use”,答案是否定的。包机制在数据库中查找每个包名称都是唯一的包。将Foo包中的内容放在名称空间Foo中是一种有用的约定,但是名称空间对包查找没有影响。也就是说,我相信可以将不同版本的包放在不同的名称空间中,但一次只能使用一个版本。

解释器中一次只能有一个版本的包。包由其名称标识,这完全独立于它们使用的名称空间。你可以在同一个过程中将不同的版本加载到不同的解释器中(你需要
interp create
,而
包的
-exact
标志需要
来获取精确的版本,而不是“最佳”版本),但这将是非常可怕的


如果在同一个解释器中有多个实例同时处于活动状态是有意义的,那么包应该首先为这些实例定义一个工厂。考虑使用类(参见[ITCR TCL]、XOTcl、TclOO、SNIT、……)/P>在不同的解释器中加载不同版本的技巧实际上是由TCLLIB插件MGR软件包使用的。@ ScLink是疯狂的方式(正如我从我在爪哇看到的纠结中所知道的……)