单方法对象(Single-Method Object)
面向对象变成的一个特例是对象只有一个方法的情况。在这种情况下,可以不用创建接口表,只要将这个单独的方法以对象的表示形式返回即可。比如说诸如io.lines或string.gmatch这样的迭代器。一个在内部保存了状态的迭代器就是一个单方法对象。
单方法对象的一种有趣情况是,这个方法其实是一个根据不同的参数完成不同任务的分发方法(dispatch method)。
function newObject (value)
return function (action, v)
if action == "get" then return value
elseif action == "set" tehn value = v
else error("invalid action")
end
end
end
这个方法使用比较简单:
d = new Object(0)
print(d("get"))
d("set, 10)
每个对象使用一个闭包,要比使用一个表的开销更低。虽然使用这种方法不能实现继承,但我们却可以拥有完全的私有性:访问单方法对象的某个成员只能通过该对象所具有的唯一方法进行。
对偶表示 (Dual Representation)
实现私有性的另一种有趣方式是使用对偶表示。
通常,我们使用键来把属性关联到表, 例如</