__tcl中的等效程序包

__tcl中的等效程序包,tcl,Tcl,有没有办法(方法调用)找到tcl中当前包的名称 例如: 我知道这里的类名显然是“abc”,但我仍然想使用tcl命令将其打印出来。我正在处理一些调试模块,因此需要这个。(与perl提供的内容类似:\uuuuuuuuuuuuuu)我不知道有类似的事情。但是,您可以解决以下问题: set __PACKAGE__ foo package provide $__PACKAGE__ 1.0 # Use can use the variable $__PACKAGE__ from now on 我不知道有这

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

例如:


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

我不知道有类似的事情。但是,您可以解决以下问题:

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

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

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

你错过了拼图的几个部分。即使您在作为包的一部分的文件中声明了
proc A
A
仍然是全局创建的

package
命令实际上只是帮助tcl确定源文件。您通常希望将
包提供的
命名空间

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 {} {..}
包和名称空间之间没有一对一的映射。因此,一个包可以创建许多名称空间(或者像在您的示例中一样,没有名称空间)

查看此页面了解如何构建库:

本页提供有关
命名空间

您缺少了一些拼图。即使您在作为包的一部分的文件中声明了
proc A
A
仍然是全局创建的

package
命令实际上只是帮助tcl确定源文件。您通常希望将
包提供的
命名空间

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 {} {..}
包和名称空间之间没有一对一的映射。因此,一个包可以创建许多名称空间(或者像在您的示例中一样,没有名称空间)

查看此页面了解如何构建库:

本页提供有关
命名空间

否。您可以在同一个文件中提供多个不同的软件包<代码>信息脚本、
信息级别
信息框架
可能会有所帮助,但它们不提供包名。否。您可以在同一个文件中提供多个不同的包
info script
info level
info frame
可能会有所帮助,但它们不提供包名。@sundar通常(但不是必需)将包定义的内容放在同名的命名空间中(模前导
);变量和命令始终是命名空间的本地变量,并且
命名空间当前
存在。@sundar:它不起作用:只打包一个全局变量,它将被下一个包覆盖。@sundar通常(但不是必需的)将包定义的内容放在具有相同名称的命名空间中(模前导
);变量和命令始终是命名空间的本地变量,并且
命名空间当前值
存在。@sundar:它不起作用:包只是一个全局变量,它将被下一个包覆盖。