Проведя некоторое исследование, включающее создание и удаление пространств имен, я натолкнулся на это любопытство:
% namespace eval foo {variable x 1}
% namespace upvar foo x x
% set x
1
% namespace delete foo
% set x
can't read "x": no such variable
% set x 2
can't set "x": upvar refers to variable in deleted namespace
%
После этого x
кажется неприкосновенным. Его нельзя прочитать или удалить, потому что он не существует, но его нельзя установить, потому что он находится в другом пространстве имен. Как восстановить x
из этого состояния?
Я пытаюсь выполнить импорт набора команд и переменных из другого пространства имен и возможность удалить это пространство имен и иметь импортированные команды и переменные. уходи. namespace delete
, кажется, делает правильные вещи в отношении импортированных команд, но для импортированных переменных нет эквивалента, и, насколько я могу судить, нет даже способа определить, импортирована ли конкретная переменная (через namespace upvar
) откуда-то еще - namespace which
сообщает вам текущее пространство имен, а namespace origin
не существует для переменных.