访问从tcl过程返回的列表列表

时间:2017-10-23 15:33:11

标签: tcl

我有一个返回列表列表的过程。我无法弄清楚如何访问内部列表而不先拆分它们。我确定必须有一个更清洁的方式。

例如,这个:

proc return_l_of_l {} {
  set x {a b c}
  set y {d e f}
  return [list [list $x] [list $y]]
}
set l [return_l_of_l]
set x_list [lindex $l 0]
set y_list [lindex $l 1]

foreach x $x_list { puts $x }
foreach y $y_list { puts $y }

输出:

a b c
d e f

a
b
c
d
e
f

2 个答案:

答案 0 :(得分:3)

问题在于这一行:

return [list [list $x] [list $y]]

由于xy已经拥有列表,因此它会列出列表列表。你应该这样做:

return [list $x $y]

或可能:

return [list [list {*}$x] [list {*}$y]]

答案 1 :(得分:0)

proc return_l_of_l {} {
  set x {a b c}
  set y {d e f}
  return [list [list $x] [list $y]]
}

返回两个列表的列表,每个列表由一个元素组成 - a b cd e f。这是因为{a b c}{d e f}已经是可以解释为列表的构造。

据说你只需要

return [list $x $y]