Забудьте о двух файлах на мгновение.Предположим, у вас есть только один файл с содержимым:
variable x hello ;# this is a global variable.
proc use {} {
puts $x
}
Это должно привести к ошибке, которая говорит, что что-то вроде $x
не определено.Зачем?Потому что Tcl, в отличие от C, не импортирует ничего в функцию, к которой вы не обращаетесь.Позвольте мне еще раз повторить: tcl procs не видит глобальные переменные или переменные пространства имен, которые вы не указываете на это.
Итак, для импорта глобальных переменных традиционным способом является использование команды global
:
variable x hello
proc use {} {
global x ;# import $x into this proc
puts $x
}
это должно работать.
Конечно же, для пространств имен слово global
не имеет смысла, поэтому была создана команда variable
, чтобы позволить процессорам, определенным в пространстве имен, видетьПеременные пространства имен:
namespace eval foo {
variable x hello
proc use {} {
variable x ;# import $x into this proc
puts $x
}
}
Существует также другой способ импорта глобальных переменных и переменных пространства имен без явного использования global
или variable
: просто укажите полное пространство имен.Глобальное пространство имен - просто ::
, поэтому также работает следующее:
variable x hello
proc use {} {
puts $::x
}
и, конечно,
namespace eval foo {
variable x hello
proc use {} {
puts $foo::x
}
}