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]
。如果您这样做,您可能会立即看到是否可以使用数组,因为这通常是一个更好的选择…

请格式化您的代码输出,使其显示为代码。我认为您需要在每行中添加一个缩进(请参阅编辑器提示)。类似的问题根源请格式化您的代码输出,使其显示为代码。我认为您需要在每一行中添加一个缩进(参见编辑器提示)