Требование пакетов - PullRequest
       15

Требование пакетов

0 голосов
/ 18 апреля 2020

используя 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?

1 Ответ

0 голосов
/ 18 апреля 2020

Все, что вам действительно нужно pkgIndex.tcl, - это строка, подобная этой, которую вы можете написать от руки (или тривиально извлечь из шаблона):

package ifneeded mylib 1.0 [list source [file join $dir mylib.tcl]]

Предполагается, что вы хотите, чтобы ваш пакет использовал немедленно погрузка. (Я всегда хочу это для моих пакетов.) Вам нужно использовать инструментальные средства только для генерации индексного файла, если вы используете отложенную загрузку, и я не очень рекомендую это для пакета или приложения любого сложность, поскольку это может иногда вызывать странные ошибки. Современные компьютеры достаточно быстры, чтобы не нуждаться в ленивой загрузке (и так было в моем опыте в течение 20 или более лет).

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