我正在尝试学习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
return $data
需要一些帮助;)
答案 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 { - }]
这样做有时会使事情变得更清楚!