Значение имени процесса, заканчивающегося :: - PullRequest
0 голосов
/ 03 ноября 2019

В базе кода 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
    ...

1 Ответ

2 голосов
/ 03 ноября 2019

Обычно я ожидал бы имя процедуры после последнего набора ::, но здесь оно пустое

Пустая строка является допустимым именем для процедуры в 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_load ed, для которой требуется имя proc (команда), а не имя пространства имен?

автоматически, сгенерируйте некоторую документацию.

Может быть, при сборке интерпретатора Tcl для частей документа взять содержащееся в нем имя пространства имен chooseDir в качестве документированного названия такой процедуры?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...