在Tcl中`string is list`的意义是什么?

时间:2018-02-16 11:59:46

标签: string list tcl

据我所知,在Tcl中,一切都是列表。那是什么意思呢? string is list $var检查?

到目前为止,只有var I的值可以使检查0为

set var \\{

对于$ var的每个其他值,检查结果为1

2 个答案:

答案 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的内部列表解析器运行字符串并监视它出错的地方,如果在全部)。

大多数情况下,您不需要它,而是使用肯定生成列表来清理输入数据的操作。 (这里的关键点通常是splitregexp,但scanbinary scan也可以提供帮助.Tcllib中还有许多解析实用程序。)