第一版是针对 Lua 5.0 编写的。虽然在很大程度上仍然适用于后续版本,但仍有一些差异。
第四版针对 Lua 5.3,可在 亚马逊 和其他书店购买。
购买本书,您还将帮助支持 Lua 项目。
用 Lua 编程 | ||
第二部分。表和对象 第 16 章。面向对象编程 |
当对象只有一个方法时,会出现面向对象编程的前一种方法的特殊情况。在这种情况下,我们不需要创建一个接口表;相反,我们可以将这个单一方法作为对象表示返回。如果这听起来有点奇怪,那么值得记住第 7.1 节,我们在其中了解了如何构造将状态保留为闭包的迭代器函数。保留状态的迭代器只不过是一个单方法对象。
单方法对象的另一个有趣情况是,当这个单方法实际上是一个调度方法,它根据一个显式参数执行不同的任务时。此类对象的可能实现如下
function newObject (value) return function (action, v) if action == "get" then return value elseif action == "set" then value = v else error("invalid action") end end end它的用法很简单
d = newObject(0) print(d("get")) --> 0 d("set", 10) print(d("get")) --> 10
这种非传统的对象实现非常有效。语法 d("set",10)
虽然很奇怪,但仅比更传统的方法 d:set(10)
长两个字符。每个对象使用一个单一的闭包,比一个表更便宜。没有继承,但我们拥有完全的私有性:访问对象状态的唯一方法是通过其唯一方法。
Tcl/Tk 对其小部件使用类似的方法。Tk 中小部件的名称表示一个函数(一个小部件命令),该函数可以对小部件执行各种操作。
版权所有 © 2003–2004 Roberto Ierusalimschy。保留所有权利。 |