TCL:忘记命令包实际上做了什么?

时间:2013-11-28 05:05:46

标签: tcl

任何人都可以帮助我理解TCL中的“包忘记”命令。

TCL手册说明了

  

package forget ?package package ...?
  从此解释器中删除有关每个指定包的所有信息,包括   package ifneededpackage provide提供的信息。

根据我的理解,在针对特定包上执行package forget命令之后,不应该执行该包中可用的命令。

是这样的吗?

还请解释package unknown命令?

1 个答案:

答案 0 :(得分:3)

Tcl包机制很简单:

当你package require SomePackage时,Tcl会查看它是否知道该包的内容。

  • 如果已加载(之前调用package provide),则只返回版本号。
  • 如果它尚未加载但它知道如何加载它(通过先前调用package ifneeded)它将执行该脚本,进行一些检查(应该加载包,版本必须匹配... )并返回版本。
  • 如果它对包没有任何了解,它将执行package unknown,它知道如何找到包并为每个找到的包调用package ifneeded

package forget只会清除package providepackage ifneeded提供的所有信息。该包的实际命令不会被删除。