Lua学习笔记(十六) (二)

2014-11-23 22:37:03 · 作者: · 浏览: 20
, (lua_Number)pUData->data[idx]);

return 1;

}

lua中设置和获取值的代码如下:

view sourceprint

arr[1] = 100

print(arr:get(1)) // 没有arr[1]的原因在于元表中的__index属性被用来指向元表本身.

其他函数大同小异. 有意思的是__gc事件.

在lua中的变量都是引用, 当一个对象没有任何变量引用的时候, 就会被lua的gc回收.

在lua中这样写, 就会让代码回收:

view sourceprint

arr = nil

在相应__gc事件的C/C++函数中, 我们就能对刚才申请的内存进行释放:

view sourceprint

int ReleaseArray( lua_State* pState )

{

LuaArray* pUData = (LuaArray*)lua_touserdata(pState, 1);

float* pExData;

memcpy_s((void*)&pExData, sizeof(float*), (void*)pUData->data, sizeof(float));

delete [] pExData;

return 0;

}

userdata+metatable的机制, 让我们能从C/C++的角度为lua提供数据和类型的扩展. 本文中对这套机制的使用方法仅仅是一个简陋的实验方法, 具体项目中可以加入许多改进以应对不同需求.