与其他语言相比,我对包和名称空间概念TCL感到困惑。
任何人都可以清楚我的问题我们可以在不同的命名空间中拥有多个具有相同名称的包吗?
答案 0 :(得分:0)
将问题中的'have'解释为'use',答案是否定的。包机制在数据库中查找包,其中每个包名都是唯一的。将Foo包中的内容放在命名空间Foo中是一种有用的约定,但命名空间对包查找没有影响。也就是说,我相信你可以在不同的命名空间中放置一个包的不同版本,但你仍然可以一次只使用一个版本。
答案 1 :(得分:0)
您一次只能在口译员中拥有一个版本的包。包由它们的名称标识,这完全独立于它们使用的命名空间。您可以通过在同一过程中将不同版本加载到不同的解释器中来做一些技巧(您需要interp create
和-exact
标记到package require
以获取精确版本而不是“最好的“一个”,但这将是非常可怕的工作。
如果您已经获得了在同一个解释器中同时激活多个实例的代码,那么该包实际上应该最初为这些实例定义工厂。考虑使用类(参见[incr Tcl],XOTcl,TclOO,Snit,...)