используя init.tcl, мы усовершенствовали команду часов для международного использования. Это работает нормально, пока я не попытаюсь инициализировать переменную в пакете с помощью команды clock. Простой пакет типа:
package provide mylib [lindex {Revision: 1.0 } 1]
namespace eval mylib {
set X [clock format [clock seconds] -format %y%m%d]
proc naught {} {
variable X
puts $X
return
}
}
Когда я запускаю pkg_mkIndex, я получаю: предупреждение: ошибка при поиске mylib.pkg: неизвестное пространство имен в шаблоне импорта ":: msgcat :: mcload"
пересмотренная команда часов - clock.tcl - использует пакет msgcat, например: uplevel # 0 {пакет требует msgcat 1.6.1. Если я добавляю команду "положить как": "PKG: [пакет требует msgcat 1.6.1]", она возвращает пустую строку, а не версию
Конечно, clock.tcl вызывается из init.tcl. Я отмечаю в коде pkg_mkIndex следующее:
$c eval {
# Stub out the package command so packages can require other
# packages.
rename package __package_orig
proc package {what args} {
switch -- $what {
require {
return; # Ignore transitive requires
}
default {
__package_orig $what {*}$args
}
}
}
Что объясняет, почему пакет msgcat не загружается.
Как мне загрузить пакет msgcat из процедуры clock.tcl?