Tcl8.6原生支持oop了
虽然tcl早先的版本就已经有oop的支持(itcl、XOTcl等),但是都是以外部扩展库的模式出现。因为习惯使用稳定版本,所以一直用tcl 8.5。前段时间安装了Mandriva 2010 spring默认安装了tcl 8.6,于是下了相关文档浏览一下,发现Tcl Commands里面多了oo::class, oo::copy, oo::define, oo::objdefine, oo::object几条命令。由于时间比较晚,粗略看了下相关描述,让我比较惊奇的是tcl 8.6貌似同时支持两种类模型:基于类和基于原型,分别对应oo::class与oo::object,oo::class是经典的类模型,先上一段代码:
oo::class create fruit { method eat {} { puts "yummy!" }}oo::class create banana { superclass fruit constructor {} { my variable peeled set peeled 0 } method peel {} { my variable peeled set peeled 1 puts "skin now off" } method edible? {} { my variable peeled return $peeled } method eat {} { if {![my edible?]} { my peel } next }}set b [banana new]$b eat → prints "skin now off" and "yummy!"
上面的代码可以很直观看出oo::class是经典的基类继承模型,而oo::object则是:
set obj [oo::object new]$obj foo → error "unknown method foo"oo::objdefine $obj method foo {} { my variable count puts "bar[incr count]"}$obj foo → prints "bar1"$obj foo → prints "bar2"
这则代码中的方法是在对象创建后才动态添加的,很明显oo::object所创建出来的是metaclass,oo::class的描述也印证了我这个想法:
The oo::class class is the class of all classes; every class is aninstance of this class, which is consequently an instance of itself. Thisclass is a subclass of oo::object, so every class is also an object.Additional metaclasses (i.e. classes of classes) can be defined if necessaryby subclassing oo::class. Note that the oo::class object hides thenew method on itself, so new classes should always be made using thecreate method.
Thisclass is a subclass of oo::object, so every class is also an object.Additional metaclasses 很清楚地说明了任何用oo::class创建的类都是oo::object的子类,因此oo::classs实际就是oo::object的一种上层封装(基于原型的类模型比经典类模型具有更大自由度及灵活性),由此大体可以看出tcl 8.6的原生类模型是一种基于原型的类模型。
时间较晚,研究得比较粗浅,大家就先凑合着看看当是开胃小菜吧....
转载于:https://www.cnblogs.com/luolan/archive/2010/09/18/1829868.html
Tcl8.6原生支持oop了相关推荐
- Firefox beta 开始原生支持 Windows 10 ARM64
早在去年12月,高通公司在其 Snapdragon 技术峰会上就曾宣布,Chromium 和 Firefox 都将作为原生应用程序进入 ARM 体系.虽然 Chromium 版本至今尚未准备就绪,但原 ...
- 大新闻!HTC旗舰手机已原生支持BCH
随着BCH的高速发展,许多企业和商家都已经添加了对BCH的支持,BCH在全球用户中的影响力也在逐渐扩大.最近,BCH又迎来了一个好消息--HTC为其Exodus 1智能手机增加了对BCH的原生支持. ...
- Abra宣布对BCH的原生支持
加密货币钱包应用Abra宣布支持比特币现金(BCH),首次允许用户直接用BCH存取款. Abra拥有数十万的账户,它声称自己是世界上唯一一个用户可以购买.出售.存储和投资28种加密货币的钱包服务.虽然 ...
- KlayGE SVN原生支持立体显示
KlayGE SVN中的版本增加了立体渲染模式,同时上层代码完全不需要修改.KlayGE成为第一个原生支持立体显示的开源游戏引擎!目前支持红青眼镜,即将加入更多不同的颜色组合和LCD shutter模 ...
- exfat驱动源码 linux_Linux 5.4内核正式发布:原生支持exFAT、AMD成最大赢家
今天,Linus Torvalds正式签署了Linux 5.4内核的正式版本,带来了大量新功能,强化了安全,更新了硬件驱动,你值得拥有. Linux 5.4从十月初开始开发,先后经历了八个RC候选版, ...
- SQL Server2016 原生支持JSON
SQL Server2016 原生支持JSON SQL Server 2005 开始支持 XML 数据类型,提供原生的 XML数据类型.XML 索引以及各种管理 XML 或输出 XML 格式的函数. ...
- 谷歌开发者大会焦点:大中华区新掌门亮相,Android 10原生支持5G,TF2.0大更新...
新智元报道 编辑:鹏飞.大明.张佳 [新智元导读]为期两天的2019谷歌开发者大会刚刚落下帷幕,谷歌推出了最新的Android 10.TensorFlow 2.0.Flutter 1.9等产品 ...
- ie内核浏览器_[正式版下载] 微软全新 Chrome 内核 Edge 浏览器!原生支持 Chrome 插件扩展...
尽管微软的 Office 和 Windows 10 势头不错,但像 WP 手机.XBox 等方面似乎并未获得预期的成功.而先前为了替代老旧的 IE 浏览器,微软倾力开发的 Edge 也未见起色. 不过 ...
- SQL Server 2016 JSON原生支持实例说明
原文:SQL Server 2016 JSON原生支持实例说明 背景 Microsoft SQL Server 对于数据平台的开发者来说越来越友好.比如已经原生支持XML很多年了,在这个趋势下,如今也 ...
最新文章
- 趁老婆不在家,我把儿子带成了程序大神...
- html背景过大,html – CSS – 背景大小:封面太大了
- MongoDB PHP数据库查询类
- 查看tp框架版本方法
- 为什么要在密码里加点“盐”
- 9个元素换6次达到排序序列_C语言必学的12个排序算法:希尔排序(第3篇)
- 入门大爆炸式发展的深度学习,你先要了解这6个著名框架
- :继续教育学习助手_我们自己做:教育的开放组织
- WPF DataGrid:解决排序、ScrollIntoView、刷新和焦点问题
- 基于YOLO的目标检测系统实践
- exadata的infiniband管理
- 紫猫中控-脚本界面的基本设计和代码结构
- 山海经妖兽录服务器维护,山海经九州异兽录不能登录怎么解决
- Hyperledger Fabric Transaction Proposal过程
- 家装灯线走线图_家装吊顶筒灯电线走法设计图 4款客厅天花吊顶龙骨筒灯顶线布置图...
- 网易云发布“工业智能平台”,开放技术赋能工业企业
- 【新知实验室】手把手实现腾讯云音视频应用
- Win10一周年更新正式版安装方法大全
- C++实现U盘小偷(超详细版)
- 盐湖提锂卤水除钙镁,高盐软化工艺有哪些?
热门文章
- 11月百度凤巢升级后的变化
- 测量仪图片_介绍一款电线电缆检测智能影像测量仪
- 28-33Linux目录指令
- java http请求 工具类_java模拟http请求调用远程接口工具类
- linux升级gnome,linux – Gnome shell特权升级
- java extern的作用_学习笔记之20-static和extern关键字2-对变量的作用
- python处理excel的书_Python处理Excel文件(csv, xls, xlsx)
- 开源上网行为管理_做好企业上网行为管理作用大
- 文件服务器 远程访问,远程访问文件服务器
- Mybatis 一对多关联查询collection用法