虽然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了相关推荐

  1. Firefox beta 开始原生支持 Windows 10 ARM64

    早在去年12月,高通公司在其 Snapdragon 技术峰会上就曾宣布,Chromium 和 Firefox 都将作为原生应用程序进入 ARM 体系.虽然 Chromium 版本至今尚未准备就绪,但原 ...

  2. 大新闻!HTC旗舰手机已原生支持BCH

    随着BCH的高速发展,许多企业和商家都已经添加了对BCH的支持,BCH在全球用户中的影响力也在逐渐扩大.最近,BCH又迎来了一个好消息--HTC为其Exodus 1智能手机增加了对BCH的原生支持. ...

  3. Abra宣布对BCH的原生支持

    加密货币钱包应用Abra宣布支持比特币现金(BCH),首次允许用户直接用BCH存取款. Abra拥有数十万的账户,它声称自己是世界上唯一一个用户可以购买.出售.存储和投资28种加密货币的钱包服务.虽然 ...

  4. KlayGE SVN原生支持立体显示

    KlayGE SVN中的版本增加了立体渲染模式,同时上层代码完全不需要修改.KlayGE成为第一个原生支持立体显示的开源游戏引擎!目前支持红青眼镜,即将加入更多不同的颜色组合和LCD shutter模 ...

  5. exfat驱动源码 linux_Linux 5.4内核正式发布:原生支持exFAT、AMD成最大赢家

    今天,Linus Torvalds正式签署了Linux 5.4内核的正式版本,带来了大量新功能,强化了安全,更新了硬件驱动,你值得拥有. Linux 5.4从十月初开始开发,先后经历了八个RC候选版, ...

  6. SQL Server2016 原生支持JSON

    SQL Server2016 原生支持JSON SQL Server 2005 开始支持 XML 数据类型,提供原生的 XML数据类型.XML 索引以及各种管理 XML 或输出 XML 格式的函数. ...

  7. 谷歌开发者大会焦点:大中华区新掌门亮相,Android 10原生支持5G,TF2.0大更新...

      新智元报道   编辑:鹏飞.大明.张佳 [新智元导读]为期两天的2019谷歌开发者大会刚刚落下帷幕,谷歌推出了最新的Android 10.TensorFlow 2.0.Flutter 1.9等产品 ...

  8. ie内核浏览器_[正式版下载] 微软全新 Chrome 内核 Edge 浏览器!原生支持 Chrome 插件扩展...

    尽管微软的 Office 和 Windows 10 势头不错,但像 WP 手机.XBox 等方面似乎并未获得预期的成功.而先前为了替代老旧的 IE 浏览器,微软倾力开发的 Edge 也未见起色. 不过 ...

  9. SQL Server 2016 JSON原生支持实例说明

    原文:SQL Server 2016 JSON原生支持实例说明 背景 Microsoft SQL Server 对于数据平台的开发者来说越来越友好.比如已经原生支持XML很多年了,在这个趋势下,如今也 ...

最新文章

  1. 趁老婆不在家,我把儿子带成了程序大神...
  2. html背景过大,html – CSS – 背景大小:封面太大了
  3. MongoDB PHP数据库查询类
  4. 查看tp框架版本方法
  5. 为什么要在密码里加点“盐”
  6. 9个元素换6次达到排序序列_C语言必学的12个排序算法:希尔排序(第3篇)
  7. 入门大爆炸式发展的深度学习,你先要了解这6个著名框架
  8. :继续教育学习助手_我们自己做:教育的开放组织
  9. WPF DataGrid:解决排序、ScrollIntoView、刷新和焦点问题
  10. 基于YOLO的目标检测系统实践
  11. exadata的infiniband管理
  12. 紫猫中控-脚本界面的基本设计和代码结构
  13. 山海经妖兽录服务器维护,山海经九州异兽录不能登录怎么解决
  14. Hyperledger Fabric Transaction Proposal过程
  15. 家装灯线走线图_家装吊顶筒灯电线走法设计图 4款客厅天花吊顶龙骨筒灯顶线布置图...
  16. 网易云发布“工业智能平台”,开放技术赋能工业企业
  17. 【新知实验室】手把手实现腾讯云音视频应用
  18. Win10一周年更新正式版安装方法大全
  19. C++实现U盘小偷(超详细版)
  20. 盐湖提锂卤水除钙镁,高盐软化工艺有哪些?

热门文章

  1. 11月百度凤巢升级后的变化
  2. 测量仪图片_介绍一款电线电缆检测智能影像测量仪
  3. 28-33Linux目录指令
  4. java http请求 工具类_java模拟http请求调用远程接口工具类
  5. linux升级gnome,linux – Gnome shell特权升级
  6. java extern的作用_学习笔记之20-static和extern关键字2-对变量的作用
  7. python处理excel的书_Python处理Excel文件(csv, xls, xlsx)
  8. 开源上网行为管理_做好企业上网行为管理作用大
  9. 文件服务器 远程访问,远程访问文件服务器
  10. Mybatis 一对多关联查询collection用法