json tcl_确定TCL中变量的类型
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中变量的类型相关推荐
- TCL中变量嵌套使用
TCL中变量嵌套使用 在使用多重嵌套变量时候,因为 {} 对于tcl来说属于非运算符号,因此在使用变量嵌套,直接调用会出现问题 即变量不能正确调用: set mm_list "0 1&quo ...
- 关于python语言的变量随时_Python中变量的类型是动态的,随时可以变化
Python中变量的类型是动态的,随时可以变化 答:√ 下列关于普通用户实现任务计划的描述,错误的是:(? ?) 答:普通用户可通过修改/etc/crontab文件制定任务计划 下列哪些属于人民战争的 ...
- python中变量的类型是动态的随时可以变化_python动态类型简介
1.a = [1,2,3]其中a是变量名,[1,2,3]是对象,a通过一个指向[1,2,3]的指针引用了对象[1,2,3]. 2.每一个对象都有两个标准的头部信息,一个是标示这个对象的类型.另外一个是 ...
- 如何判断JS中变量的类型
前言 判断JS类型,有以下几种方法: typeof instanceof Object.property.toString.call JS中的数据类型 JS的基本类型共有七种: number stri ...
- python中变量类型在程序中可以改变_Python中的变量和数据类型,python,及
变量 变量的定义: 在程序中,有时我们需要对2个数据进行求和,那么该怎样做呢? 大家类比一下现实生活中,比如去超市买东西,往往咱们需要一个菜篮子,用来进行存储物品,等到所有的物品都购买完成后,在收银台 ...
- json中的值类型及输出对象的所有名称和对应的值
json中的值类型共有8种,分别为nullValue, intValue,uintValue, realValue, stringValue,booleanValue, arrayValue, ojb ...
- 【Groovy】Groovy 动态语言特性 ( Groovy 中的变量自动类型推断以及动态调用 | Java 中必须为变量指定其类型 )
文章目录 前言 一.Groovy 动态语言 二.Groovy 中的变量自动类型推断及动态调用 三.Java 中必须为变量指定其类型 前言 Groovy 是动态语言 , Java 是静态语言 ; 一.G ...
- python中变量类型在程序中可以改变_python的可变与不可变数据类型
首先,我们需要知道在python中哪些是可变数据类型,哪些是不可变数据类型.可变数据类型:列表list和字典dict:不可变数据类型:整型int.浮点型float.字符串型string和元组tuple ...
- C51中变量类型和范围
文章目录 1 C51中变量类型和范围 1 C51中变量类型和范围 C51中变量类型和范围需要特别注意下,int只占两个字节,指针类型也是占2个字节. 参考资料: 手把手教你学51单片机:C语言版
最新文章
- 如何快速设计元器件原理图库和PCB封装库?
- 吴恩达“官宣”荣升准爸爸~
- Swift 基本基本运算符
- 【若依(ruoyi)】按钮样式
- Python中关于XML-RPC原理
- 关于Fragment、Tabhost和FragmentPagerAdapter来实现导航栏的效果
- UI设计新趋势|拟物风格UI设计素材模板
- WPF教程六:布局之Grid面板(转)
- DirectAdmin面板在线解压缩的.tar.gz文件
- cart算法 java_决策树学习笔记(三):CART算法,决策树总结
- kvm初体验之八:调整vm的vcpu, memory, disk大小
- python 打开txt_python编程之文件操作
- 软件设计师历年真题(2016-2021)
- 联想E480安装win7成功 安装蓝牙驱动成功 type-c失败
- 差分编码与译码代码编写
- 【差分约束 模板题】 洛谷P5960(未完待续)
- PAT 乙级 1065 单身狗 (25 分)
- Tomcat IP访问限制
- 计算机一级wps office考试题库,2017计算机一级WPSOffice复习题(含答案)
- Debian9开机自动执行脚本或程序
热门文章
- c#输入三个数选出最大的_C#习题,3、 输入三个数字,输出他们的最大值。(if) | 学步园...
- MySQL 命令和内置函数
- Visual Studio项目版本转换器(c#项目版本转换器 v1.0)
- Oracle plsql 月历
- WIN7开启WIFI
- C++总结篇(4)内存管理
- 关于数组首地址a、a+1、a[0]、a[0]+1、*a、*a、a+0的解析
- Python3实现从txt文件中读取指定行的方法
- git 创建webpack项目_从0到1开发一个小程序cli脚手架(一)创建页面/组件模版篇...
- 自动图片轮播php源码,js实现自动图片轮播代码