【转载】TCL装载包和版本控制
package ifneeded package version ?script?
package names
package present ?-exact? package ?version?
package provide package ?version?
package require ?-exact? package ?version?
package unknown ?command?
package vcompare version1 version2
package versions package
package vsatisfies version1 version2
_________________________________________________________________
这个命令维持由当前解释器使用的可获得的包以及如何把它们装载到解释器中的一个简单的数据库。它支持每个包的多个版本,并基于应用的需要安排装载一个包的正确的版本。这个命令还检测并报告版本冲突。典型的,在通常的
Tcl脚本中只调用package require和package provide命令;其他命令主要被系统脚本用来维护包数据库。
package 命令的行为由它的第一个参数确定。允许下列形式:
从这个解释器中删除关于每个指定的包的所有信息,包括由package ifneeded 和 package provide 提供的信息。
这个命令典型的只出现在系统配置脚本中,被用来设置包数据库。若需要一个特定的包的一个特定的版本,它指示如果这个包的这个版本是可获得的,可通过执行script来把这个包来增加到解释器上。脚本保存在一个数据库中,由随后的package require命令使用;典型的,script为在包中的命令设置自动装载(或直接调用load和/或source),接着调用package provide来指示这个包已存在。在数据库中可以有一个单一的包的多个版本的信息。如果数据库已包含了对 package和version的信息,则新script替换现存的脚本。如果省略了 script 参数,返回包 package 的版本 version的当前脚本,如果未对这个 package 和 version 调用 package ifneeded 命令则返回一个空串。
返回在这个解释器中所有包的名字,为这些包提供了一个版本(通过package provide)或可获得给它们的package ifneeded脚本。在列表中的元素的次序是任意的。
package present ?-exact? package ?version?
除了在包没有装载时它不尝试并装载它之外,这个命令等价于package require。
package provide package ?version?
调用这个命令来指示在这个解释器中包package的这个版本version现在已ifneeded脚本的一部分而调用一次,并在包最终装载时被包自身再次调用。如果以前的package provide 命令已package的一个不同的版本则生成一个错误。如果省略了version参数,则命令返回当前提供包的版本号,如果在这个解释器中对 package没有调用 package provide 命令则返回一个空串。
package require ?-exact? package ?version?
这个命令典型的被想要使用特定包的特定版本的Tcl脚本调用。参数指示想要哪个包,和确保把包的合适版本装载到解释器中的命令。如果命令成功执行,它返回装载的包的版本号;否则生成一个错误。如果同时指定了 -exact开关和version选项,则只接受给定版本。如果省略了 -exact 但指定了 version ,则主版本号与 version 相同但晚于version的版本也可以接受。如果省略了-exact和version二者则任何版本都可接受。如果package的一个版本(通过调用package provide命令),则它的版本号必须满足由-exact 和version给出的条件并且命令立即返回。否则,命令查找由以前的package ifneeded命令提供的信息的数据库,看是否能获得一个可接受的版本。如果有,则调用最可接受的版本号的脚本;它必须做所有装载这个包所必须的工作,包括调用为这个包调用package provide。如果package ifneeded数据库不包含这个包的可接受的版本并且为这个解释器指定了一个package unknown 命令则调用这个命令;当它完成的时候,Tcl
再次检查是否现在提供了这个包或是否有一个给它的package ifneeded脚本。如果所有这些步骤不能提供这个包的一个可接受的版本,则命令返回一个错误。
package unknown ?command?
这个命令提供在一个“最后一搏”(``last resort'') 命令,在 package require 期间如果package ifneeded数据库中没有一个包的合适的版本可调用这个命令。如果提供了command参数,它包含一个命令的第一部分,在一次package require命令期间调用这个命令的时候,Tcl添加给出所须的包的名字和版本的两个附加参数。例如,如果 command是foo bar 并且后来调用了命令 package require test 2.4,则 Tcl将执行命令 foo bar test 2.4 来装载这个包。如果未给 package require命令提供版本号,则给这个被调用的命令的版本参数是一个空串。如果 package unknown命令但不加 command 参数,则返回当前的 package unknown 脚本,如果没有就返回一个空串。如果指定command 为一个空串,若当前有 package unknown 脚本则删除它。
package vcompare version1 version2
比较由 version1和 version2 给出的两个版本。如果 version1 比 version2 早就返回 -1,如果相同则返回0,如果 version1 比 version2 晚则返回 1。
package versions package
返回 package 的所有版本号,通过package ifneeded命令为它们提供了信息。
package vsatisfies version1 version2
如果为 version2 写的脚本不须更改就可为 version1 工作则返回1(例如,version1 大于等于 version2
并且有相同的主版本号),否则返回 0。版本号由一个或多个用点号分隔的十进制数组成,比如 2 或 1.162 或3.1.13.1。第一个数叫做主版本号。越大的数对应一个包的越晚的版本,最左边的数有更大的权重(sig-nificance). 例如,版本 2.1 比 1.3 晚而版本 3.4.6 比 3.3.5晚。遗漏的字段等价于零: 版本 1.3 于版本 1.3.0 和 1.3.0.0 相同,所以它比1.3.1 和1.3.0.2早。假定一个晚期版本向上(upward)兼容有相同主版本号的早期版本。例如,为一个包的版本 2.3 写的 Tcl 脚本应当在版本 2.3.2、2.4、和 2.5.1 下不须更改就能工作。主版本号的变更表示有不兼容的变更:如果代码是使用了一个包的版本 2.1 写成的,不保证在版本 1.7.3 或版本 3.1下不须更改就能工作。推荐的在 Tcl 中使用包的方式是在脚本中调用 package require 和 package provide 命令,并使用过程 pkg_mkIndex 来建立包索引文件。一旦你已这样做了,将自动的装载包来响应 package require 命令。详情请参见pkg_mkIndex 的文档。
【转载】TCL装载包和版本控制的更多相关文章
- [转载]ecmall语言包程序
[转载]ecmall语言包程序 (-- ::) 转载▼ 标签: 转载 收藏了 原文地址:ecmall语言包程序作者:我思故我在 执行顺序 登陆后台后 最先执行的文件是 default.app.php ...
- [转载]为什么jar包中能看见源码
[转载]为什么jar包中能看见源码 这个也是我之前发现过的一个现象,只是之前没有研究过.今天正好在知乎看见,总结一下: 对于Maven或者Gradle项目,依赖的部分会自动从远程仓库下载源码 生成的j ...
- [转载]UDP丢包率提升
UDP丢包及无序问题 转载自:http://hi.baidu.com/gamedot/item/96cb9bf1a717eb14d6ff8cd5 最近在做一个项目,在这之前,做了个验证程序. 发现客户 ...
- [TimLinux] TCL 自定义包
1. 包 很多功能存放在一起,定义为一个包,在iTcl(Incr TCL)之后,可以定义一个类,类可以放在一个包里面,包为一个独立的文件,可以为TCL文件,也可以为C/C++语言实现的动态库. 2. ...
- 【转载】抓包工具tcpdump用法说明
转载地址:http://www.cnblogs.com/f-ck-need-u/p/7064286.html tcpdump采用命令行方式对接口的数据包进行筛选抓取,其丰富特性表现在灵活的表达式上. ...
- 转载------一小时包教会 —— webpack 入门指南
本文写的蛮好,转载地址:http://www.w2bc.com/Article/50764 其他的地址: http://webpack.github.io/docs/usage-with-gulp.h ...
- 【转载】抓包工具Fidder详解(主要来抓取Android中app的请求) 包括https
文章:http://blog.csdn.net/jiangwei0910410003/article/details/19806999/ Fiddler官网:http://www.telerik.co ...
- 【XMLRPC实现跨语言编程】Tcl <----> python
转载请声明出处,谢谢合作. # 期望一种能实现tcl.python两者解释器能双向通讯的结合体# py->tcl: from Tkinter import Tcl; tcl = Tcl(); t ...
- maven添加jar包依赖
maven的东西使用了一段时间,但是每次使用都多少有点含糊,所以总结一下. 目前主要使用是在jar包的控制上 原理: 在本地,指定一个文件夹,便是maven的仓库,maven会从远程的中央仓库中下载你 ...
随机推荐
- acm数据结构整理
一.区间划分 //区间划分+持久化并查集:区间连通情况统计. inline bool comp(Ask x, Ask y){return x.km == y.km ? x.l > y.l : x ...
- HDU 3436--Queue-jumpers (树状数组 or Splay Tree)
树状数组这个真心想了好久,还是没想出来 %%% www.cppblog.com/Yuan/archive/2010/08/18/123871.html 树状数组求前缀和大于等于k的最大值,第一次看到这 ...
- [iOS基础控件 - 5.3] 电台APP可滚动主界面(UIScrollView制作)
A.功能 1.上下可滚动的电台 2 x n 的图标集 2.顶部半透明标题 3.底部半透明功能按钮 B.实现思路 1.设置图标.启动画面 2.拖入UIScrollView,设置背景色 ( ...
- 【Stage3D学习笔记续】山寨Starling(十一):Touch事件体系
我们的山寨Starling版本将会在这里停止更新了,主要还是由于时间比较有限,而且我们的山寨版本也很好的完成了他的任务“了解Starling的核心渲染”,接下来的Starling解析我们将会直接阅读S ...
- wavecom短信猫常用AT命令
wavecom短信猫常用AT命令 一.一般命令 1. AT+CGMI 给出模块厂商的标识. 2. AT+CGMM 获得模块标识.这个命令用来得到支持的频带 (GSM 900,DCS 1800 或PCS ...
- java基础三种循环的使用及区别
摘要:Java新人初学时自己的一些理解,大神们路过勿喷,有什么说的不对不足的地方希望能给予指点指点,如果觉得可以的话,希望可以点一个赞,嘿嘿,在这里先谢了.在这里我主要说的是初学时用到的Java三个循 ...
- ecshop数据库表结构
ecs_account_log //用户账目日志表 ecs_activity //活动表(代码,名称,开始,结束,描述) ecs_ad //广告表(位置,类型,名称,链接,图片,开始,结束,广告主相关 ...
- cocos2d-x 将cocosbuilder输出文件映射成对象的原理
转自:http://www.cnblogs.com/fox7nights/archive/2013/02/21/2920640.html 一.调用代码 CCNode* GameOverScene::l ...
- 【转载】总结一下Android中主题(Theme)的正确玩法
http://www.cnblogs.com/zhouyou96/p/5323138.html 总结一下Android中主题(Theme)的正确玩法 在AndroidManifest.xml文件中有& ...
- How to add “Maven Managed Dependencies” library in build path eclipse
If you have m2e installed and the project already is a maven project but the maven dependencies are ...