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"