【发布时间】:2011-09-15 08:36:48
【问题描述】:
我正在寻找一种在 Tcl 中查找变量类型的方法。例如,如果我有变量 $a 并且我想知道它是否是整数。
到目前为止,我一直在使用以下内容:
if {[string is boolean $a]} {
#do something
}
这似乎适用于以下类型:
alnum, alpha, ascii, boolean, control, digit, double, false, graph, integer, lower, print, punct, space, true, upper, wordchar, xdigit
但是它无法告诉我我的变量是数组、列表还是字典。有谁知道一种方法来判断一个变量是否是这三个中的任何一个?
【问题讨论】:
-
你需要什么版本的TCL?
-
你能解释一下为什么你首先需要这个吗?我的意思是,由于 Tcl 本质上是一种无类型语言,因此您所要求的看起来像是自找麻烦。
-
@Kostix,当然。我需要这个的原因是创建一个将字典解析为 JSON 的过程。例如 JSON 中的字符串由 "" 包围,而整数则不是。此外,如果字典要包含另一个字典,则该字典应该在 JSON 对象中获取自己的 JSON 对象。
-
@Tom,然后我会选择另一种方法,并要求您的包的用户使用显式类型标签为序列化程序提供(人工)注释结构。比如
serialize [object $mykey1 [int $value] $mykey2 [float $bar]]等等。试图推断无类型值的类型很容易出错,无法修复。更不用说当我希望字符串“0123”真正序列化为字符串而不被解释为 123 或 83 时的明显情况(有关有趣的东西,请参阅 wiki.tcl.tk/498) -
我很困惑,如果你有 8.5 你应该有 string is list available 但它不在你提供的类型列表中
标签: variables tcl object-type