在TCL需要帮助

时间:2013-08-30 17:30:16

标签: tcl

% set j 1
1

% set a [list $j]
1

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

% set a "$j"
1

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

在这种情况下,""[list]之间的确切区别是什么?为什么最后一个案例中的j值没有被替换,因为它以(引号)开头?为什么在j案例中% set a [list {$j}]值未被替换?我真的很困惑。

1 个答案:

答案 0 :(得分:1)

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

基本上,它讨论了分组和Tcl中的不同替换,我认为这真的会让你理解你所要求的内容。

  

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

你的问题很模糊。如果你问的是set a [list {$j}]set a "[list {$j}]"之间的确切区别,我会说没有区别。在这两种情况下,变量a都被设置为您定义的列表。

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

set a This list contains: [list {$j}]

set a "This list contains: [list {$j}]"

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

第二行是给a一个按引号"This list contains: [list {$j}]"分组的变量。引号将允许命令替换,以便执行命令list并将返回值赋给变量{ {1}}。

  

为什么最后一个案例中的a值没有被替换,因为它以(引号)开头?为什么在j案例中j值未被替换?

最里面的分组是% set a [list {$j}],并且大括号可以阻止任何形式的替换。会发生什么是您首先获得{$j}并且Tcl评估命令:"[list {$j}]"。列表的第一个元素是未取代的字符串[list {$j}],因此$j返回list而不是变量$j的值。

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

j

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

[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中工作。如果您应用我所解释的内容,应该很容易理解上述每种情况发生的原因。