以 :: 结尾的过程名称的含义
Meaning of a proc name ending with ::
在 tk 代码库中我找到了构造:
proc ::tk::dialog::file::chooseDir:: {args} {
通常我希望过程名称在最后一组 ::
之后,但这里它是空的。这是命名空间中的某种构造函数吗?
(可能看起来像一个微不足道的问题,但我不是 tcl 程序员,需要了解它才能自动生成一些文档。
更多代码(可能提供一些背景,它是文件的开头)
namespace eval ::tk::dialog {}
namespace eval ::tk::dialog::file {}
namespace eval ::tk::dialog::file::chooseDir {
namespace import -force ::tk::msgcat::*
}
proc ::tk::dialog::file::chooseDir:: {args} {
variable ::tk::Priv
set dataName __tk_choosedir
upvar ::tk::dialog::file::$dataName data
Config $dataName $args
...
Normally I would expect the procedure name after the last set of ::
but here it is empty
空字符串是 Tcl 中过程的有效名称(对于变量也是如此)。
% namespace eval ::tk::dialog::file::chooseDir {}
% proc ::tk::dialog::file::chooseDir:: {args} { return "called!" }
% ::tk::dialog::file::chooseDir::
called!
% namespace eval ::tk::dialog::file::chooseDir { "" }
called!
% info procs ::tk::dialog::file::chooseDir::*
::tk::dialog::file::chooseDir::
我不知道这些 Tk 内部结构背后的历史,但是使用空字符串命名的过程可能是同名命名空间 chooseDir
(作为一种命名约定)的主要过程,而不仅仅是复制名称:proc ::tk::dialog::file::chooseDir::chooseDir {args} {;}
。或者,是因为整个目录选择功能是 auto_loaded,需要 proc(命令)名称而不是命名空间名称?
automatically, generate some documentation.
也许,在获取 Tcl 解释器以供记录时,将包含的命名空间名称 chooseDir
作为此类过程的记录名称?
在 tk 代码库中我找到了构造:
proc ::tk::dialog::file::chooseDir:: {args} {
通常我希望过程名称在最后一组 ::
之后,但这里它是空的。这是命名空间中的某种构造函数吗?
(可能看起来像一个微不足道的问题,但我不是 tcl 程序员,需要了解它才能自动生成一些文档。
更多代码(可能提供一些背景,它是文件的开头)
namespace eval ::tk::dialog {}
namespace eval ::tk::dialog::file {}
namespace eval ::tk::dialog::file::chooseDir {
namespace import -force ::tk::msgcat::*
}
proc ::tk::dialog::file::chooseDir:: {args} {
variable ::tk::Priv
set dataName __tk_choosedir
upvar ::tk::dialog::file::$dataName data
Config $dataName $args
...
Normally I would expect the procedure name after the last set of :: but here it is empty
空字符串是 Tcl 中过程的有效名称(对于变量也是如此)。
% namespace eval ::tk::dialog::file::chooseDir {}
% proc ::tk::dialog::file::chooseDir:: {args} { return "called!" }
% ::tk::dialog::file::chooseDir::
called!
% namespace eval ::tk::dialog::file::chooseDir { "" }
called!
% info procs ::tk::dialog::file::chooseDir::*
::tk::dialog::file::chooseDir::
我不知道这些 Tk 内部结构背后的历史,但是使用空字符串命名的过程可能是同名命名空间 chooseDir
(作为一种命名约定)的主要过程,而不仅仅是复制名称:proc ::tk::dialog::file::chooseDir::chooseDir {args} {;}
。或者,是因为整个目录选择功能是 auto_loaded,需要 proc(命令)名称而不是命名空间名称?
automatically, generate some documentation.
也许,在获取 Tcl 解释器以供记录时,将包含的命名空间名称 chooseDir
作为此类过程的记录名称?