据我所知,在Tcl中,一切都是列表。那是什么意思呢?
string is list $var
检查?
到目前为止,只有var I的值可以使检查0为
set var \\{
。
对于$ var的每个其他值,检查结果为1
答案 0 :(得分:2)
来自man页面
列表
任何正确的列表结构,带有可选的周围空格。 如果列表结构不正确,则返回0并且varname将返回 包含列表解析失败的“元素”的索引,或-1 如果无法确定。
它将帮助我们找出输入字符串是否具有有效的列表结构。
在tclsh
% set x {a {}
它将等待用户再给一个大括号来完成命令。
% set x {a {}
}
a {}
%
% string is list "{a {}"
0
% string is list "{a {}
}"
1
如果必须执行任何与列表相关的命令,则输入应具有有效的列表结构。
% llength "{a {}"
unmatched open brace in list
%
要使此错误无效,您可以使用string is list
确保其具有有效的结构。 (当然,您也可以使用catch
来防止此错误)
假设您可能遇到要验证输入是否具有有效列表结构的情况,那么您可以使用它。
答案 1 :(得分:2)
有各种不是列表的字符串。当然,你可能有不平衡的大括号,但这是一个平衡大括号的例子:
% set str "{this and this}{and that}"
{this and this}{and that}
% string is list $str
0
在关闭括号之后立即使用非空格字符(这可能很容易在实际数据中出现)往往会导致出现非列表。 string is list
命令意味着不是猜测特定字符串是否是列表,而是可以确定(在内部,它通过Tcl的内部列表解析器运行字符串并监视它出错的地方,如果在全部)。
大多数情况下,您不需要它,而是使用肯定生成列表来清理输入数据的操作。 (这里的关键点通常是split
和regexp
,但scan
和binary scan
也可以提供帮助.Tcllib中还有许多解析实用程序。)