lyh916

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  201 随笔 :: 0 文章 :: 12 评论 :: 21万 阅读

参考链接:

https://www.cnblogs.com/herenzhiming/articles/6101767.html

 

总结:

1.定义

userdata即用户自定义数据,它提供了一块内存区域,可以用来存储自定义的数据

如下,lua_newuserdata会根据指定的大小分配一块内存,并将对应的userdata压入栈中,最后返回这个内存块的地址

void *lua_newuserdata(lua_State *L, size_t size);

 

2.元表

为了区别不同类型的用户自定义数据(userdata),可以为userdata设置元表,即每种类型的userdata都有对应类型的元表

如下,luaL_checkudata会检查栈中指定位置是否为一个userdata,并且是否具有与给定名称相匹配的元表

void *luaL_checkudata(lua_State *L, int index, const char *tname);

 

3.面向对象的访问

通过给userdata的元表设置__index元方法,即可实现userdata的面向对象

由于userdata本身没有key,所以当用key访问userdata时,就会去找元表中的__index

posted on   艰苦奋斗中  阅读(769)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示