以 :: 结尾的过程名称的含义

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 作为此类过程的记录名称?