【问题标题】:How to understand when to use the $ sign with list commands in TCL?如何理解在 TCL 中何时将 $ 符号与列表命令一起使用?
【发布时间】:2020-12-02 21:15:45
【问题描述】:
这里我们有 3 个命令:lindex、lappend 和 length。
如果我想使用它们,我需要将 $ 符号与 lindex 和 llength 一起使用,但我不需要将它与 lappend 一起使用。
看下面的代码:
set list_name {1 2 3 4 5}
puts [lindex $list_name 1]
lappend list1 6
puts [llength $list_name]
我如何理解在哪个命令之后我需要使用带有变量名的 $ 符号以及何时不需要使用它?
【问题讨论】:
标签:
list
function
scripting
command
tcl
【解决方案1】:
一般规则是如果 Tcl 正在读取变量的值,请使用 $。
修改已有变量时,不使用$,使用变量名。
- lappend 直接修改了它的参数,所以它需要一个变量名。
- lindex 正在读取某个索引处的列表值,因此
列表已使用。
- llength 正在读取一个列表的值,所以值
列表中的一个被使用。
这三个实际上相当简单。我发现lreplace 是最难记住的。 lreplace 返回一个新列表并且不修改作为参数给出的列表。它接受列表的值作为参数。
直接修改列表:
使用列表的值:
【解决方案2】:
tcl documentation 中的约定之一是使用 varName 或 typeVariable 来表示采用变量名并修改变量内容的事物,而 typeValue 或 type(如 list、string、dictionaryValue)用于取值的事物那种类型的。后一种情况是当您使用$foo 传递变量的内容时。第一种情况是当您使用foo 时(当然,除非您要使用的变量的名称本身在变量中)。
如果您正在使用 tcl,您还必须熟悉 Dodekalogue,了解 $ 的含义以及一般如何使用它(规则 8)。