我对tcl中的数组有疑问,以下代码的工作原理如下:
set Employee_Info_Array(EmployeeId,EmplogeePhoneNumber) "0 12345678 0 0 0"
proc setEmployee_Info_Array {{empId} {phoneNumber} {infoList}} {
set Employee_Info_Array($empId,$phoneNumber) $infoList
}
proc getEmployee_Info_Array {{empId} {phoneNumber}} {
return Employee_Info_Array($empId,$phoneNumber);
}
Run Code Online (Sandbox Code Playgroud)
变量Employee_Info_Array是一个数组,初始值是"0 12345678 0 0 0",但是当我们调用时setEmployee_Info_Array {1,87654321, "1 1 1"},该数组是如何设置的?这个数组中有两个条目吗?如条目1:"0 12345678 0 0 0"条目2:"1,87654321,1 1 1"?当我们使用getEmployee_Info_Array(1 1),我们得到的东西?
你在这里的代码有很多错误
set Employee_Info_Array(EmployeeId,EmplogeePhoneNumber) "0 12345678 0 0 0"
Run Code Online (Sandbox Code Playgroud)
您现在有一个包含一个键/值对的数组:
> parray Employee_Info_Array
Employee_Info_Array(EmployeeId,EmplogeePhoneNumber) = 0 12345678 0 0 0
Run Code Online (Sandbox Code Playgroud)
我猜你真正想要的是这样的:
set Employee_Info_Array(0,12345678) "0 0 0"
> parray Employee_Info_Array
Employee_Info_Array(0,12345678) = 0 0 0
Run Code Online (Sandbox Code Playgroud)
第一个命令需要a global才能实际使用相同的数组:
proc setEmployee_Info_Array {{empId} {phoneNumber} {infoList}} {
global Employee_Info_Array
set Employee_Info_Array($empId,$phoneNumber) $infoList
}
Run Code Online (Sandbox Code Playgroud)
第二个命令也需要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)"
Run Code Online (Sandbox Code Playgroud)
这样会更正确:
proc getEmployee_Info_Array {{empId} {phoneNumber}} {
global Employee_Info_Array ;# same deal, needs global
return $Employee_Info_Array($empId,$phoneNumber);
}
Run Code Online (Sandbox Code Playgroud)
最后,列出调用它的方式将失败,因为您传递的是单个值
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"}"
Run Code Online (Sandbox Code Playgroud)
如果您实际按照您的意图传递值,则效果会更好.请记住,tcl命令是所有形式的command ?arg1? ... ?argn?.您没有用大括号括起参数列表,或用逗号分隔每个参数:
setEmployee_Info_Array 1 87654321 "1 1 1"
Run Code Online (Sandbox Code Playgroud)
把它们放在一起:
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
Run Code Online (Sandbox Code Playgroud)
这给出了输出:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
169 次 |
| 最近记录: |