Readonly Tuple in Tcl
Tuple 这个概念本身相当于一个 List 。
程序语言里面,很多时候 Tuple 和 List 是并存的概念。区别是 Tuple 一般是只读的。
Tuple in Tcl
Tcl 语言自身是没有 Tuple 这种数据类型的。
但根据上面的分析,我门实际上需要的只是一个 Readonly List
proc tuple {*name value} {
upvar 1 ${*name} var
set var $value
trace add variable var write [lamda {name args} {
return -code error -level 2 "Error: tuple `$name` is readonly!"
} ${*name}]
}
proc test-tuple {} {
tuple months [list Jan Feb Mar ...]
lset months 1 "May"
}
test-tuple
输出结果:
Error: tuple `months` is readonly!
(write trace on "months")
invoked from within
"lset months 1 "May""
(procedure "test-tuple" line 4)
invoked from within
"test-tuple"