访问从tcl过程返回的列表列表
我有一个返回列表列表的过程。我不知道如何访问内部列表而不首先拆分它们。我相信一定有更干净的方法 例如,这:访问从tcl过程返回的列表列表,tcl,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 }
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
不是:
问题在于这一行:
return [list [list $x] [list $y]]
由于x
和y
已经包含列表,因此它会生成一个列表列表。你应该改为:
return [list $x $y]
或者可能:
return [list [list {*}$x] [list {*}$y]]
问题在于这一行:
return [list [list $x] [list $y]]
由于x
和y
已经包含列表,因此它会生成一个列表列表。你应该改为:
return [list $x $y]
或者可能:
return [list [list {*}$x] [list {*}$y]]
返回两个列表的列表,每个列表由单个元素组成-abc
和def
。这是因为{abc}
和{def}
已经是可以解释为列表的结构
应该你只需要
return [list $x $y]
返回两个列表的列表,每个列表由单个元素组成-abc
和def
。这是因为{abc}
和{def}
已经是可以解释为列表的结构
应该你只需要
return [list $x $y]
在打印列表的内部元素时,最好使用类似于
foreach a[concat{*}$l]{put$a}
的内容concat{*}$l
创建一个包含内部元素的平面列表,这意味着不管外部列表中有多少个列表:您仍然可以使用一个foreach
命令打印它们。打印列表的内部元素时,最好使用类似foreach a[concat{*}$l]{put$a}的命令
concat{*}$l
创建一个包含内部元素的平面列表,这意味着不管外部列表中有多少个列表:您仍然可以使用一个foreach
命令打印它们。