我想了解这种命令[join]

时间:2019-05-14 21:41:58

标签: tcl

我正在尝试学习TCL,我的任务之一是编写一个适用于这种代码的过程。

1. [join [funct [lindex $data$i]] { - }] - i dont understand that at all but...
2. [join [funct] { - }] - ... i understand this in 100%, and know what happend here
  1. 这是过程“ funct”中的联接列表,并在单词之间使用“-”创建一个字符串。 但是1.对我来说这是一种魔术。我需要一些特殊的退货手续才能使用1吗?因为现在我只使用:
return $data

需要一些帮助;)

1 个答案:

答案 0 :(得分:0)

这主要是组成问题。 [funct [lindex $data $i]]产生一个列表;它可能看起来像一个字符串,但这是一个列表。我们怎么知道呢?它被馈送到join的第一个参数中,并且被定义为接受列表。为了争辩,让我们将该列表变得相当简单:

a {b c} d

现在让我们做内部[join … { - }]。这将使用列表中的所有元素,并以-(嗯,空格显示得不是很好)作为分隔符,生成这些元素的字符串。在我们的示例字符串上,给出:

a - b c - d

由于有三个元素,因此结果中有两个分隔符。但是,现在我们将再次join … { - }来解决这个问题(我假设这就是您要的内容)。这意味着我们重新解释我们刚得到的作为列表的字符串(这是有效的,如果不总是最有效的方法)。请注意,-是一个很好的普通列表元素文字。

a - - - b - c - - - d

如果在外部join中使用其他字符,将会更加清楚。而是使用|

a | - | b | c | - | d

或者我们可以使用不带空格的连接符字符串。使用,,我们将得到:

a,-,b,c,-,d

通常,Tcl命令会立即执行它们的操作,而不会试图窥视任何事物的更广泛的上下文。可以使用辅助变量将任何复杂的命令复合分解成较小的部分,并且在语义上是等效的。

因此,我们可以将[join [join [funct [lindex $data $i]] { - }] { - }]更改为:

set item [lindex $data $i]
set theList [funct $item]
set join1 [join $theList { - }]
set join2 [join $join1 { - }]

这样做有时会使事情变得更清楚!