有没有办法(方法调用)找出tcl ??
中当前包的名称例如:
package provides abc
proc A {
// I need to print the package name abc.
}
我知道这里的类名显然是“abc”,但我仍然希望使用tcl命令将其打印出来。我正在研究一些调试模块,因此需要这个。 (与perl提供的内容类似: __ PACKAGE __ )
答案 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 provide
与namespace
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
此页面提供有关package
和namespace
的完整说明
http://www.tcl.tk/man/tcl8.6/TclCmd/contents.htm