Tcl的变量没有类型(除了他们是否真的变量的关联数组 - 即使用$foo(bar)语法 - FO r你使用array exists)但Tcl的值。好吧,有点。 Tcl可以在不同类型之间进行变异,因为它认为合适,并且不公开这些信息[*];你所能做的就是检查一个值是否符合特定的类型。

这种一致性检查与完成string is(在您需要的-strict选项,丑陋的历史原因):

if {[string is integer -strict $foo]} {

puts "$foo is an integer!"

}

if {[string is list $foo]} { # Only [string is] where -strict has no effect

puts "$foo is a list! (length: [llength $foo])"

if {[llength $foo]&1 == 0} {

# All dictionaries conform to lists with even length

puts "$foo is a dictionary! (entries: [dict size $foo])"

}

}

请注意,所有值符合字符串类型; Tcl的值是总是可序列化。对于JSON序列化,可以使用肮脏的黑客来产生一个“正确的”序列化(严格地说,从Tcl的角度来看,所有东西都是正确的,但这对其他语言并不完全有帮助)与Tcl 8.6。代码要做到这一点,原本张贴在Rosetta Code是:

package require Tcl 8.6

proc tcl2json value {

# Guess the type of the value; deep *UNSUPPORTED* magic!

regexp {^value is a (.*?) with a refcount} \

[::tcl::unsupported::representation $value] -> type

switch $type {

string {

# Skip to the mapping code at the bottom

}

dict {

set result "{"

set pfx ""

dict for {k v} $value {

append result $pfx [tcl2json $k] ": " [tcl2json $v]

set pfx ", "

}

return [append result "}"]

}

list {

set result "\["

set pfx ""

foreach v $value {

append result $pfx [tcl2json $v]

set pfx ", "

}

return [append result "\]"]

}

int - double {

return [expr {$value}]

}

booleanString {

return [expr {$value ? "true" : "false"}]

}

default {

# Some other type; do some guessing...

if {$value eq "null"} {

# Tcl has *no* null value at all; empty strings are semantically

# different and absent variables aren't values. So cheat!

return $value

} elseif {[string is integer -strict $value]} {

return [expr {$value}]

} elseif {[string is double -strict $value]} {

return [expr {$value}]

} elseif {[string is boolean -strict $value]} {

return [expr {$value ? "true" : "false"}]

}

}

}

# For simplicity, all "bad" characters are mapped to \u... substitutions

set mapped [subst -novariables [regsub -all {[][\u0000-\u001f\\""]} \

$value {[format "\\\\u%04x" [scan {& } %c]]}]]

return "\"$mapped\""

}

警告:不支持上面的代码。这取决于肮脏的黑客。它很容易在没有预警的情况下突破。 (但是它不工作。移植到Tcl的8.5将需要一个微小的C扩展到读出的类型的注释。)

[*]严格,但它用于发现当前类型注释提供一个不支持的接口的价值为8.6 - 作为::tcl::unsupported::representation的一部分 - 但该信息采用刻意的人类可读形式,如有更改,恕不另行通知。它用于调试,而不是代码。而且,Tcl在内部使用相当多的不同类型(例如,,缓存的命令和变量名称),在正常情况下你不想探测;事情是引擎盖下相当复杂的...

json tcl_确定TCL中变量的类型相关推荐

  1. TCL中变量嵌套使用

    TCL中变量嵌套使用 在使用多重嵌套变量时候,因为 {} 对于tcl来说属于非运算符号,因此在使用变量嵌套,直接调用会出现问题 即变量不能正确调用: set mm_list "0 1&quo ...

  2. 关于python语言的变量随时_Python中变量的类型是动态的,随时可以变化

    Python中变量的类型是动态的,随时可以变化 答:√ 下列关于普通用户实现任务计划的描述,错误的是:(? ?) 答:普通用户可通过修改/etc/crontab文件制定任务计划 下列哪些属于人民战争的 ...

  3. python中变量的类型是动态的随时可以变化_python动态类型简介

    1.a = [1,2,3]其中a是变量名,[1,2,3]是对象,a通过一个指向[1,2,3]的指针引用了对象[1,2,3]. 2.每一个对象都有两个标准的头部信息,一个是标示这个对象的类型.另外一个是 ...

  4. 如何判断JS中变量的类型

    前言 判断JS类型,有以下几种方法: typeof instanceof Object.property.toString.call JS中的数据类型 JS的基本类型共有七种: number stri ...

  5. python中变量类型在程序中可以改变_Python中的变量和数据类型,python,及

    变量 变量的定义: 在程序中,有时我们需要对2个数据进行求和,那么该怎样做呢? 大家类比一下现实生活中,比如去超市买东西,往往咱们需要一个菜篮子,用来进行存储物品,等到所有的物品都购买完成后,在收银台 ...

  6. json中的值类型及输出对象的所有名称和对应的值

    json中的值类型共有8种,分别为nullValue, intValue,uintValue, realValue, stringValue,booleanValue, arrayValue, ojb ...

  7. 【Groovy】Groovy 动态语言特性 ( Groovy 中的变量自动类型推断以及动态调用 | Java 中必须为变量指定其类型 )

    文章目录 前言 一.Groovy 动态语言 二.Groovy 中的变量自动类型推断及动态调用 三.Java 中必须为变量指定其类型 前言 Groovy 是动态语言 , Java 是静态语言 ; 一.G ...

  8. python中变量类型在程序中可以改变_python的可变与不可变数据类型

    首先,我们需要知道在python中哪些是可变数据类型,哪些是不可变数据类型.可变数据类型:列表list和字典dict:不可变数据类型:整型int.浮点型float.字符串型string和元组tuple ...

  9. C51中变量类型和范围

    文章目录 1 C51中变量类型和范围 1 C51中变量类型和范围 C51中变量类型和范围需要特别注意下,int只占两个字节,指针类型也是占2个字节. 参考资料: 手把手教你学51单片机:C语言版

最新文章

  1. 如何快速设计元器件原理图库和PCB封装库?
  2. 吴恩达“官宣”荣升准爸爸~
  3. Swift 基本基本运算符
  4. 【若依(ruoyi)】按钮样式
  5. Python中关于XML-RPC原理
  6. 关于Fragment、Tabhost和FragmentPagerAdapter来实现导航栏的效果
  7. UI设计新趋势|拟物风格UI设计素材模板
  8. WPF教程六:布局之Grid面板(转)
  9. DirectAdmin面板在线解压缩的.tar.gz文件
  10. cart算法 java_决策树学习笔记(三):CART算法,决策树总结
  11. kvm初体验之八:调整vm的vcpu, memory, disk大小
  12. python 打开txt_python编程之文件操作
  13. 软件设计师历年真题(2016-2021)
  14. 联想E480安装win7成功 安装蓝牙驱动成功 type-c失败
  15. 差分编码与译码代码编写
  16. 【差分约束 模板题】 洛谷P5960(未完待续)
  17. PAT 乙级 1065 单身狗 (25 分)
  18. Tomcat IP访问限制
  19. 计算机一级wps office考试题库,2017计算机一级WPSOffice复习题(含答案)
  20. Debian9开机自动执行脚本或程序

热门文章

  1. c#输入三个数选出最大的_C#习题,3、 输入三个数字,输出他们的最大值。(if) | 学步园...
  2. MySQL 命令和内置函数
  3. Visual Studio项目版本转换器(c#项目版本转换器 v1.0)
  4. Oracle plsql 月历
  5. WIN7开启WIFI
  6. C++总结篇(4)内存管理
  7. 关于数组首地址a、a+1、a[0]、a[0]+1、*a、*a、a+0的解析
  8. Python3实现从txt文件中读取指定行的方法
  9. git 创建webpack项目_从0到1开发一个小程序cli脚手架(一)创建页面/组件模版篇...
  10. 自动图片轮播php源码,js实现自动图片轮播代码