__tcl中的等效程序包
有没有办法(方法调用)找到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 我不知道有这
我知道这里的类名显然是“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:它不起作用:包只是一个全局变量,它将被下一个包覆盖。