Tcl 如何执行lappend$varname1$varname2
我已经搜索了Tcl 如何执行lappend$varname1$varname2,tcl,Tcl,我已经搜索了lappend$var1$var2,但没有找到任何确切的答案,它将如何执行 % set a {a b c} a b c % set b {d e} d e % puts [lappend $c $b] can't read "c": no such variable >>> here it throws error like variable not exist % puts [lappend $a $b] {d e}
lappend$var1$var2
,但没有找到任何确切的答案,它将如何执行
% set a {a b c}
a b c
% set b {d e}
d e
% puts [lappend $c $b]
can't read "c": no such variable >>> here it throws error like variable not exist
% puts [lappend $a $b]
{d e} >>> here it doesn't throw any error, can someone explain it and how to print the value of $a, if $a is a new variable
% puts $$A
can't read "A": no such variable
% puts $$a
$a b c
% puts ${$a}
can't read "$a": no such variable
lappend
的第一个参数是变量名,而不是值。因此,一般来说,它应该是:
lappend var1 $var2
其中var1和var2都是列表变量。有关详细信息,请参阅。
lappend
的第一个参数是变量名,而不是值。因此,一般来说,它应该是:
lappend var1 $var2
其中var1和var2都是列表变量。有关更多详细信息,请参阅。Tcl有一个严格适用于所有内容的两级语法。第一级是Tcl通用语法,它采用:
lappend $var1 $var2
并将其解析为三个单词:lappend
,通过读取变量var1
获得的单词,以及通过读取变量var2
获得的单词
然后,Tcl向以第一个单词命名的命令(lappend
,一个Tcl内置的)发送命令,该命令应用命令语法处理。在lappend
的情况下,非常简单:第一个参数命名变量,第二个和后续参数是要附加到命名变量列表中的单词
在您的例子中,命名变量的第一个参数是通过读取另一个变量(var1
)获得的,要附加到列表中的值来自一个变量(var2
);像abcde
这样的名称在Tcl中是一个合法的变量名,但使用起来真的很尴尬。你很有可能不想写这样的代码:在变量中输入变量名通常是代码混乱的标志。您可以这样做,但您几乎不想这样做(除非您将变量名与upvar
一起使用)。你可能真的想写:
lappend var1 $var2
Tcl非常精确地区分了变量名和变量内容该$
不是装饰性的它的意思是“立即读取此变量,$var1
在语义上实际上等同于[set var1]
。(后来出现了$
速记,这是当时的Tcl 2.0特性!)
Tcl也不允许使用
$$vrbl
进行双重解引用。在极少数情况下您需要它,您可以执行[设置$vrbl]
。如果你这样做了,你可能应该马上看看是否可以使用数组,因为这通常是一个更好的选择…Tcl有一个两级语法,它严格适用于所有东西。第一级是Tcl通用语法,它采用:
lappend $var1 $var2
并将其解析为三个单词:lappend
,通过读取变量var1
获得的单词,以及通过读取变量var2
获得的单词
然后,Tcl向以第一个单词命名的命令(lappend
,一个Tcl内置的)发送命令,该命令应用命令语法处理。在lappend
的情况下,非常简单:第一个参数命名变量,第二个和后续参数是要附加到命名变量列表中的单词
在您的例子中,命名变量的第一个参数是通过读取另一个变量(var1
)获得的,要附加到列表中的值来自一个变量(var2
);像abcde
这样的名称在Tcl中是一个合法的变量名,但使用起来真的很尴尬。你很有可能不想写这样的代码:在变量中输入变量名通常是代码混乱的标志。您可以这样做,但您几乎不想这样做(除非您将变量名与upvar
一起使用)。你可能真的想写:
lappend var1 $var2
Tcl非常精确地区分了变量名和变量内容该$
不是装饰性的它的意思是“立即读取此变量,$var1
在语义上实际上等同于[set var1]
。(后来出现了$
速记,这是当时的Tcl 2.0特性!)
Tcl也不允许使用
$$vrbl
进行双重解引用。在极少数情况下您需要它,您可以执行[设置$vrbl]
。如果您这样做,您可能会立即看到是否可以使用数组,因为这通常是一个更好的选择…请格式化您的代码输出,使其显示为代码。我认为您需要在每行中添加一个缩进(请参阅编辑器提示)。类似的问题根源请格式化您的代码输出,使其显示为代码。我认为您需要在每一行中添加一个缩进(参见编辑器提示)