Рассмотрим, что делает auto_mkindex
: он создает файл tclIndex
, который содержит
set auto_index(print_name) [list source [file join $dir TypeA.tcl]]
set auto_index(dummy) [list source [file join $dir TypeA.tcl]]
set auto_index(::TypeB::print_name) [list source [file join $dir TypeB.tcl]]
Когда вы namespace import TypeB::*
, тогда tcl выполняет source [file join $dir TypeB.tcl]
, и процесс print_name
вытягивается в глобальное пространство имен.
Что происходит, когда вы звоните dummy
? this: source [file join $dir TypeA.tcl]
- тянет процесс dummy
в глобальное пространство имен. Но в то же время, print_name
процесс переопределен .
На этом этапе вы все равно можете позвонить TypeB::print_name
Вам нужно будет выполнить одно из:
namespace import TypeB::*
, или dummy
. Возможно, вам пригодится realpath ()
.
realpath ()
расширяет все символические ссылки и разрешает ссылки на'/./'
,'/../'
и лишние'/'
символы в входной путь и возвращает канонизированный абсолютный путь.
Однако эта функция предполагает, что рассматриваемый путь действительно существует. Он не будет выполнять канонизацию для несуществующего пути. В этом случае возвращается FALSE.