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

Tcl 以以下结尾的过程名称的含义:,tcl,Tcl,在tk代码库中,我找到了构造: proc ::tk::dialog::file::chooseDir:: {args} { 通常,我希望过程名称位于最后一组:之后,但在这里它是空的。这是命名空间中的某种构造函数吗? (可能看起来是一个微不足道的问题,但我不是tcl程序员,需要了解它才能自动生成一些文档 更多的代码(可能会提供一些背景,这是文件的开头) 通常,我希望过程名称位于最后一组:: 但这里是空的 空字符串是Tcl中过程的有效名称(与变量相同) 我不知道这些Tk内部结构背后的历史,但是使用

在tk代码库中,我找到了构造:

proc ::tk::dialog::file::chooseDir:: {args} {
通常,我希望过程名称位于最后一组
之后,但在这里它是空的。这是命名空间中的某种构造函数吗? (可能看起来是一个微不足道的问题,但我不是tcl程序员,需要了解它才能自动生成一些文档

更多的代码(可能会提供一些背景,这是文件的开头)

通常,我希望过程名称位于最后一组:: 但这里是空的

空字符串是Tcl中过程的有效名称(与变量相同)

我不知道这些Tk内部结构背后的历史,但是使用空字符串命名的过程可能是同一命名名称空间
chooseDir
(作为一种命名约定)的主要过程,而不仅仅是复制名称:
proc::Tk::dialog::file::chooseDir::chooseDir{args}{;}
。或者,这是因为整个目录拾取功能都被禁用了,这需要一个proc(命令)名称而不是名称空间名称

自动生成一些文档

也许,在为要记录的片段获取Tcl解释器时,将包含名称空间的名称
chooseDir
作为这样一个过程的记录名称

通常,我希望过程名称位于最后一组:: 但这里是空的

空字符串是Tcl中过程的有效名称(与变量相同)

我不知道这些Tk内部结构背后的历史,但是使用空字符串命名的过程可能是同一命名名称空间
chooseDir
(作为一种命名约定)的主要过程,而不仅仅是复制名称:
proc::Tk::dialog::file::chooseDir::chooseDir{args}{;}
。或者,这是因为整个目录拾取功能都被禁用了,这需要一个proc(命令)名称而不是名称空间名称

自动生成一些文档


也许,在为要记录的片段获取Tcl解释器时,可以将包含名称空间的名称
chooseDir
作为这样一个过程的记录名称?

FWIW,
::tk::dialog::file::chooseDir::
与之密切相关。感谢您提供的详细答案。我认为有了这些信息,我可以使用它。对于命令,可以使用使用这些奇怪的名称并没有多大好处。在Tk的深层含义之外,也没有任何特殊约定。如果是数组,则空名称的变量工作得很好,您可以执行
set(elem).
$(elem)
。此外,sqlite3不喜欢结果集持有者名称使用空数组名称。这似乎是一个bug…FWIW,
::tk::dialog::file::chooseDir:::
与之密切相关。感谢详细的回答。我认为有了这些信息,我可以使用它。对于命令,使用这些奇怪的名称并没有什么好处。Th在Tk的深层部分之外,也没有任何特殊约定。如果是数组,则空名称的变量工作得很好,因为您可以执行
set(elem).
$(elem)
。此外,sqlite3不喜欢结果集持有者名称为空的数组名称。这似乎是一个bug……这是Tk实现的一部分。您可能不应该首先为其生成太多文档(上列出了受支持的API)@DonalFellows我知道它不是专门针对tk的,而是在一个通用文档包中(doxygen对tcl的支持有限)我发现了th的问题,我用它作为一个例子来澄清问题。这是Tk实现的一部分。您可能不应该首先为它生成太多文档(支持的API列在上)@DonalFellows我知道它不是专门为Tk的,而是在一个通用文档包中(doxygen对tcl的支持有限)我发现了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
    ...
% 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::