TCL需要帮助吗

TCL需要帮助吗,tcl,Tcl,在这种情况下,“和[列表]之间的确切区别是什么?为什么最后一种情况下的j值没有替换为以(引号)开头的值?为什么在%设置[list{$j}]案例中,j值没有被替换?关于这一点,我真的很困惑。你可以阅读这篇文章,其中谈到了你在这里提出的问题 基本上,它讨论了Tcl中的分组和不同的替换,我认为这将真正让您理解您所问的问题 在这种情况下,“”和[列表]之间的确切区别是什么 你的问题很模糊。如果你问设置一个[list{$j}]和设置一个“[list{$j}]”之间到底有什么区别,我会说没有区别。在这两种情

在这种情况下,
[列表]
之间的确切区别是什么?为什么最后一种情况下的
j
值没有替换为以(引号)开头的值?为什么在
%设置[list{$j}]
案例中,
j
值没有被替换?关于这一点,我真的很困惑。

你可以阅读这篇文章,其中谈到了你在这里提出的问题

基本上,它讨论了Tcl中的分组和不同的替换,我认为这将真正让您理解您所问的问题

在这种情况下,“”和[列表]之间的确切区别是什么

你的问题很模糊。如果你问
设置一个[list{$j}]
设置一个“[list{$j}]”
之间到底有什么区别,我会说没有区别。在这两种情况下,变量
a
都被设置为您定义的列表

引号用于将单词组合在一起形成一个参数。如果您有以下情况,您的代码会有所不同:

% set j 1
1

% set a [list $j]
1

% set a [list {$j}]
{$j}

% set a "$j"
1

% set a "[list {$j}]"
{$j}

第一行给出变量
a
4个参数,即:
This
list
包含:
[list{$j}]
,但这会给您一个错误,因为
set
最多只接受两个参数,一个是变量名,另一个是变量值

第二行是给
a
一个按引号分组的单个变量
“此列表包含:[list{$j}]”
引号将允许命令替换,以便执行命令
list
,并将返回值提供给变量
a

为什么最后一种情况下的
j
值没有替换为以(引号)开头的值?为什么在
%设置[list{$j}]
案例中,
j
值没有被替换

最里面的分组是
{$j}
,大括号防止任何形式的替换发生。发生的情况是,您首先得到
“[list{$j}]”
,Tcl对命令进行求值:
[list{$j}]
。列表的第一个元素是一个未替换的字符串
$j
,因此
list
返回
$j
,而不是变量
j
的值

要使列表返回变量
j
的值,只需删除大括号:

set a "This list contains: [list {$j}]"
由于
[list$j]
是引号中唯一的内容,因此您可以删除引号以产生相同的结果

set a "[list $j]"
请注意,列表中的元素通常以大括号形式返回:

set a [list $j]
请注意,这相当于:

% puts [list "item 1" "item 2"]
{item 1} {item 2}
因为没有需要执行的替换。但是

% puts [list {item 1} {item 2}]
{item 1} {item 2}

我认为这应该足够简单,以显示替代和分组在Tcl中是如何工作的。如果你应用了我所解释的内容,应该很容易理解为什么会发生上述每一种情况。

你首先需要的帮助是如何为问题设计有效的标题。你需要通读感谢的解释。但我想知道以下两种说法之间的区别设置一个“1234”1234%为那些特定的语句设置一个[list 1234]1234%@用户,没有区别。将
1
替换为
$xyz
,如果该变量包含复合值,则可能会观察到差异。
% puts [list {item 1} {item 2}]
{item 1} {item 2}
% set a "item 1"
item 1
% set b "item 2"
item 2
% puts [list "$a" "$b"]
{item 1} {item 2}
% puts [list $a $b]
{item 1} {item 2}
% puts [list {$a} {$b}]
{$a} {$b}
% puts [list "$a $b"]
{item 1 item 2}
% puts [list {$a $b}]
{$a $b}