_clACKAGE__等效于tcl

时间:2013-07-31 05:27:40

标签: tcl

有没有办法(方法调用)找出tcl ??

中当前包的名称

例如:

package provides abc

proc A {

// I need to print the package name abc. 

}

我知道这里的类名显然是“abc”,但我仍然希望使用tcl命令将其打印出来。我正在研究一些调试模块,因此需要这个。 (与perl提供的内容类似: __ PACKAGE __

2 个答案:

答案 0 :(得分:1)

我不知道那样的事情。但是,你可以解决:

set __PACKAGE__ foo
package provide $__PACKAGE__ 1.0
# Use can use the variable $__PACKAGE__ from now on

答案 1 :(得分:0)

你错过了一些谜题。即使您在作为包的一部分的文件中声明proc A,仍然会在全局创建A

package命令实际上只是帮助找出要导出的文件。您通常希望将package providenamespace

混合使用
package provide abc

namespace eval ::abc {
    proc A {} {puts stdout "I am in namespace [namespace current]"}
    proc B {} {..}
    proc C {} {..}
}

为了调用此功能,您可以说

::abc::A

A的正文中,您可以使用namespace current

告诉您所在的命名空间

另一种写作方式是

namespace eval ::abc {}
proc ::abc::A {} {puts stdout "I am in namespace [namespace current]"}
proc ::abc::B {} {..}
proc ::abc::C {} {..}

包和名称空间之间没有一对一的映射。因此,一个包可以创建许多名称空间(或者像您的示例中那样,没有名称空间)。

查看此页面以了解如何构建库: http://www.tcl.tk/man/tcl8.5/tutorial/Tcl31.html

此页面提供有关packagenamespace的完整说明 http://www.tcl.tk/man/tcl8.6/TclCmd/contents.htm