有没有办法(方法调用)在 tcl 中找出当前包的名称?
例如:
package provides abc
proc A {
// I need to print the package name abc.
}
我知道这里的类名显然是“abc”,但我仍然想使用 tcl 命令将其打印出来。我正在开发一些调试模块,因此需要这个。(类似于 perl 提供的:__ PACKAGE __)
有没有办法(方法调用)在 tcl 中找出当前包的名称?
例如:
package provides abc
proc A {
// I need to print the package name abc.
}
我知道这里的类名显然是“abc”,但我仍然想使用 tcl 命令将其打印出来。我正在开发一些调试模块,因此需要这个。(类似于 perl 提供的:__ PACKAGE __)
我不知道有这样的事情。但是,您可以解决:
set __PACKAGE__ foo
package provide $__PACKAGE__ 1.0
# Use can use the variable $__PACKAGE__ from now on
你错过了一些难题。即使您proc A
在作为包的一部分的文件中声明,A
仍然是全局创建的。
该package
命令实际上只是帮助 tcl 确定要获取哪个文件。你通常想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