1

有没有办法(方法调用)在 tcl 中找出当前包的名称?

例如:

package provides abc

proc A {

// I need to print the package name abc. 

}

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

4

2 回答 2

1

我不知道有这样的事情。但是,您可以解决:

set __PACKAGE__ foo
package provide $__PACKAGE__ 1.0
# Use can use the variable $__PACKAGE__ from now on
于 2013-07-31T06:28:40.853 回答
0

你错过了一些难题。即使您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

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

于 2016-05-20T04:30:18.053 回答