当一个对象只有一个方法时,可以不用创建接口table,但是要将这个单独的方法作为对象来返回。可以参考迭代器那一节,是如何构造一个迭代器函数,那个函数将状态保存为closure。
一个具有状态的迭代器是一个单一方法对象。
单一方法对象还有一种情况,若这个方法是一个调度(dispatch)方法,它根据某个参数来完成不同的操作:
function newObject(value) --value is upvalue 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
每个对象都用一个closure,这比都用一个table更高效。虽然无法实现继承,却拥有了完全的私密控制。
访问一个对象状态只有一个方式,那就是通过它的单一方法。
以上内容来自:《Lua程序设计第二版》和《Programming in Lua third edition 》
时间: 2024-10-21 07:27:00