В коде, который у вас есть, совершенно не так
set Employee_Info_Array(EmployeeId,EmplogeePhoneNumber) "0 12345678 0 0 0"
Теперь у вас есть массив с одной парой ключ / значение:
> parray Employee_Info_Array
Employee_Info_Array(EmployeeId,EmplogeePhoneNumber) = 0 12345678 0 0 0
Я предполагаю, что вы действительно хотели что-то вроде этого:
set Employee_Info_Array(0,12345678) "0 0 0"
> parray Employee_Info_Array
Employee_Info_Array(0,12345678) = 0 0 0
Первая команда нуждается в global
, чтобы фактически использовать тот же массив:
proc setEmployee_Info_Array {{empId} {phoneNumber} {infoList}} {
global Employee_Info_Array
set Employee_Info_Array($empId,$phoneNumber) $infoList
}
Вторая команда также нуждается в global
, плюс ей требуется $
для фактического возврата значения, о котором идет речь. Как и было, возвращается строка Employee_Info_Array($empId,$phoneNumber)
с заменой empId
и phoneNumber
:
proc getEmployee_Info_Array {{empId} {phoneNumber}} {
return Employee_Info_Array($empId,$phoneNumber);
}
getEmployee_Info_Array a b ;# returns literal value "Employee_Info_Array(a,b)"
Это было бы более правильно:
proc getEmployee_Info_Array {{empId} {phoneNumber}} {
global Employee_Info_Array ;# same deal, needs global
return $Employee_Info_Array($empId,$phoneNumber);
}
Наконец, способ, которым вы перечисляете вызов, будет неудачным, потому что вы передаете одно значение
setEmployee_Info_Array {1,87654321, "1 1 1"}
wrong # args: should be "setEmployee_Info_Array empId phoneNumber infoList"
while executing
"setEmployee_Info_Array {1,87654321, "1 1 1"}"
Если вы на самом деле передаете значения так, как вы хотели, это работает лучше. Помните, что команды tcl имеют форму command ?arg1? ... ?argn?
. Вы не заключаете список аргументов в фигурные скобки или не разделяете запятые:
setEmployee_Info_Array 1 87654321 "1 1 1"
Собираем все вместе:
set Employee_Info_Array(0,12345678) "0 0 0"
proc setEmployee_Info_Array {{empId} {phoneNumber} {infoList}} {
global Employee_Info_Array
set Employee_Info_Array($empId,$phoneNumber) $infoList
}
proc getEmployee_Info_Array {{empId} {phoneNumber}} {
global Employee_Info_Array
return Employee_Info_Array($empId,$phoneNumber);
}
puts "Initial value"
parray Employee_Info_Array
setEmployee_Info_Array 1 87654321 "1 1 1"
puts "After set"
parray Employee_Info_Array
Что дает в качестве вывода:
Initial value
Employee_Info_Array(0,12345678) = 0 0 0
After set
Employee_Info_Array(0,12345678) = 0 0 0
Employee_Info_Array(1,87654321) = 1 1 1