getpeer和setpeer的含义是什么。

在cocos2dx样例中,有这样的代码:

function UIButtonTest.extend(target)
local t = tolua.getpeer(target)
if not t then
    t = {}
    tolua.setpeer(target, t)
end
setmetatable(t, UIButtonTest)
return target
end

setpeer和getpeer是用来做什么的?

点赞
用户258523
用户258523

这些是 tolua 函数。tolua 手册(例如在这里)对它们进行了解释。

tolua.setpeer (object, peer_table) (仅适用于 lua 5.1)

将这个表设置为对象的对等表(可为空)。对等表是存储对象所有自定义 lua 字段的地方。当使用 lua 5.1 编译时,tolua++ 将对等表存储为对象的环境表,并使用 lua_gettable / settable(而不是 lua 5.0 的 lua_rawget / set)来检索和存储其上的字段。这允许我们在我们的表上实现自己的对象系统(使用元表),并使用它作为从用户数据对象继承的一种方式。考虑前面示例的另一种替代方案:

-- 一个 'LuaWidget' 类
LuaWidget = {}
LuaWidget.__index = LuaWidget

function LuaWidget:add_button(caption)
    -- 将一个按钮添加到我们的小部件中。'self'将是 userdata Widget
end

local w = Widget()
local t = {}
setmetatable(t, LuaWidget) -- 将't'设置为 LuaWidget 的一个实例

tolua.setpeer(w, t) -- 将't'设置为'w'的对等表

set_parent(w) -- 现在我们使用 'w' 作为对象

w:show() -- 来自 'Widget' 的一个方法
w:add_button("Quit") -- 来自 LuaWidget 的一个方法(但我们仍然使用 'w' 来调用它)

在索引对象时,将首先查找对等表(如果存在),因此我们不需要实现自己的 __index 元方法来调用 C++ 函数。


tolua.getpeer (object) (仅适用于 lua 5.1)

从对象中检索对等表(可以为空)。

2014-04-02 13:25:42