Lua
中没有private
,table
中的key/value
可以随意访问,利用metatable
虽然可以施加一些限制,但是实际上有各种方法可以绕过这些限制。
下面介绍一种方法,实现真正的封装。
上面这段代码中,每个object
对应两个成员MemberA
、MemberB
,因为PrivateDataMap
是局部变量,所以外部的代码无法直接访问,只能通过TestClass
提供的接口访问这些成员。
PrivateDataMap
的实现方法如下:
其中,object
与member
的对应关系存储在weaktable
中,不会影响object
的释放。