set var1 A
set var2 {A}
是否可以检查TCL中的变量是否为列表?对var1
和var2
llength
给出1
。我认为这两个变量被认为是相同的。它们都是包含1个元素的列表。我是对的吗?
答案 0 :(得分:7)
这两个东西被认为是完全相同的,并且会生成相同的字节码(除了用于指示常量内容位置的任何字节偏移,这通常不是通常暴露给脚本的信息,所以你可以忽略它,加上由变量名称引起的明显差异)。从语义上讲,大括号是一种引用机制,而不是列表(或脚本,或......)的指示符。
您需要编写代码,不要假设它可以通过检查值的类型来查找。 123
的类型可以是许多不同的东西,例如整数,列表(长度为1),unicode字符串或命令名称。 Tcl的语义基于你 not 询问值的类型,而只是使用命令并让它们根据需要将值强制转换为正确的类型。在这方面,Tcl与许多其他语言不同。
由于采用了这种不同的方法,一般来说回答这个问题并不容易:答案太长了,所有不同的可能情况都被视为一般但其中大部分都是无关紧要的到你真正想做的事情。询问具体的事情,我们将能够更轻松地告诉你。
答案 1 :(得分:3)
你可以尝试string is list $var1
但是这将接受这两种形式 - 它只会在语法上不能被解释为列表的东西上返回false,例如。因为有一个无法比拟的括号,如“aa {bb”。