我面临的问题是,如何检查该过程返回的列表是由单个列表组成,还是可能包含子列表。
#simple list
set a { 1 2 3 4}
# list consisting of sub list
set a { {1 2 3 4} {5 6 7 7} }如上所述,变量a有时会有一个列表,有时proc会返回由子列表组成的列表。
更新零件
设置mysqlsel $db "SELECT * FROM abc“-list
我不知道查询是否会返回单个列表或由子列表组成的列表
发布于 2011-10-21 15:54:53
你真的应该重新思考你的方法:由于Tcl是无类型的,你不能真正区分{{1 2 3 4} {5 6 7 8}}是两个列表的列表,还是两个字符串的列表,或者一个文字字符串{1 2 3 4} {5 6 7 8},因为所有这些命题都是真的,这取决于你让Tcl解释这个值的方式。
另一件事是,即使您试图在每个顶级元素上尝试catch {lindex $element 0}或string is list $element之类的东西,看看它是否可以解释为列表,这也只能被限定为非列表字符串,而这些字符串实际上不能被解析为列表,比如aaa { bbb。字符串foo也是一个正确的列表(长度为1,包含"foo“作为其唯一元素)。
您可以考虑使用的一种方法是将返回值包装在另一个附加了某种“标记”的值中--这是在其他一些无类型语言(如LISP和Erlang )中经常使用的技巧。它看起来像这样:
1 2 3 4,请返回{flat {1 2 3 4}}。{1 2 3 4} {5 6 7 8},请返回{1 2 3 4} {5 6 7 8}然后在客户端代码中打开"tag“元素并解封装有效负载:
lassign [your_procedure ...] tag payload
switch -- $tag {
flat {
# do something with $payload
}
nested {
# do something with $payload
}
}https://stackoverflow.com/questions/7846148
复制相似问题