首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检查过程返回列表或带子列表的列表

检查过程返回列表或带子列表的列表
EN

Stack Overflow用户
提问于 2011-10-21 15:15:44
回答 1查看 773关注 0票数 1

我面临的问题是,如何检查该过程返回的列表是由单个列表组成,还是可能包含子列表。

代码语言:javascript
运行
复制
#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

我不知道查询是否会返回单个列表或由子列表组成的列表

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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“元素并解封装有效负载:

代码语言:javascript
运行
复制
lassign [your_procedure ...] tag payload
switch -- $tag {
  flat {
    # do something with $payload
  }
  nested {
    # do something with $payload
  }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7846148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档