У меня есть переменная пространства имен, которое определяется, как показано ниже:Понимание использования Tcl переменного пространства имен
namespace eval ::SMB::{
variable SmbInfo
------
------
proc ::SMB::SmbCreate {name dutport} {
variable SmbInfo
global DutPorts DutPort_2 DutPorts_3 smb
------
------
if{"" != [info command SMB::$name]} {
return -code error "command name \"$name\" already exists"
}
set SmbInfo($name -DutPort) $dutport
Я новичок в Tcl и пытаюсь понять выше кусок кода. Несколько вопросов, пожалуйста, поправьте меня, если я неправ в любой момент:
Переменная SmbInfo определяется на первое место в пространстве имен становится переопределяется одной объявленной в процедуре SmbCreate. Я не могу понять, какова цель линии:
set SmbInfo($name -DutPort) $dutport
Я могу видеть, что «DutPorts» определяется как глобальная, но я не мог найти «DutPort». Я еще не выполнил код. Это может быть ошибка?
Is ($ name - DutPort) создает индекс массива для переменной SmbInfo, а значение $ dutport устанавливается на эту конкретную переменную массива?
У меня есть аналогичные структуры кода в файле, как показано ниже
set SmbInfo($name - SmbSetDmac) [BuildMac1 $SmbInfo($from_name-DutPort)]
Где BuildMac1 процедура. Немного объяснение вышеприведенного кода также может сделать это понятным.
Если что-то упущено, чтобы отправить сообщение в вопрос, пожалуйста, укажите мне, я отредактирую свой вопрос. Спасибо заранее.
Не кажется ли вам немного странным, чтобы сначала утверждать, что команда не существует, а затем быстро вызвать ее? –