12 | 高手秘诀:识别Lua的独有概念和坑
该思维导图由 AI 生成,仅供参考
弱表
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了Lua中的一些独特概念和常见坑,以及在OpenResty开发中遇到的Lua相关问题。其中包括弱表、闭包和upvalue的概念,以及在实际开发中需要注意的问题。弱表在解决垃圾回收中的引用问题方面具有独特作用,而闭包和upvalue则是Lua中重要的概念,能够帮助访问另一个函数词法作用域中的变量。此外,文章还提到了在OpenResty开发中常见的坑,如Lua中下标从1开始,但在LuaJIT中使用ffi.new创建的数组下标却是从0开始。另外,文章还介绍了Lua中的正则模式匹配和json编码时无法区分array和dict的问题,以及对变量个数限制的讨论。总的来说,本文通过介绍这些内容,帮助读者更好地理解Lua的特点和注意事项,为读者快速了解Lua的独特概念和在实际开发中需要注意的问题提供了有益的指导。
《OpenResty 从入门到实战》,新⼈⾸单¥59
全部留言(19)
- 最新
- 精选
- 燕羽阳lua指令是32位,其中6位作为操作码,8位作为本地变量和upvalue寻址(即256个)。类似的限制还有函数中只能定义262144个常量(2^18)
作者回复: 👍 这些设计到 Lua 虚拟机指令,感兴趣的同学推荐看看张秀宏老师写的《自己动手实现Lua:虚拟机、编译器和标准库》
2019-07-01213 - 小飞哥 超級會員写在最后的do end 是不是表示代码块的意思? do end封装后是不是其它function是无法访问的?
作者回复: 是的,除非你在 do end 之前预定义了一个变量,比如: local f do function f() ... end end -- do
2019-06-222 - helloworld老师,文中提到的OpenResty的API和LuaJIT的API,你看我这么理解对不对: OpenResty的API,是指lua-nginx-module模块提供的API LuaJIT的API,是指lua-resty-core和各种lua-resty-*项目中提供的API
作者回复: OpenResty 的 API 指的是lua-nginx-module和lua-resty-core提供的接口,都是 `ngx` 来头的;LuaJIT 的 API 是扩展了 Lua 内置的库,比如 `table.new` 这种
2019-06-2122 - 罐头瓶子upvalue 上线250这个是考虑到变量查找效率的问题?如果local变量过多可以放在table里面加快查找效率?
作者回复: 其实上限是 256, 这个是 Lua 虚拟机的指令占用的大小决定的。超过 256 的话,Lua 虚拟机就不支持了。
2019-06-211 - 英雄local t = cjson.empty_array 这行代码没看懂
作者回复: 这是把 cjson 这个模块的 empty_array 函数,赋值给了 t 这个变量。在 Lua 中函数是一等公民,可以像变量一样使用
2019-07-11 - geraltlaushcoroutine 0: /usr/local/openresty/nginx/lua/hello.lua: in main chunk, client: 127.0.0.1, server: localhost, request: "GET /lua HTTP/1.1", host: "localhost" 2019/07/09 14:21:09 [error] 854136#854136: *16 lua entry thread aborted: runtime error: /usr/local/openresty/nginx/lua/hello.lua:17: attempt to index global 'cjson' (a nil v stack traceback,老师,这个是怎么回事
作者回复: 能否贴下具体的代码?给个 github 的 gist 地址就行
2019-07-09 - HelloBug老师,typo:”即使这个变量并不在 foo 里面定义“,应该是”即使这个变量并不在 bar 里面定义“~~
作者回复: 多谢反馈,已经修改:)
2019-06-26 - soooldier看完后对week table还是完全懵的,有没有更浅显易懂的文章呢?
作者回复: 可以看 Lua 作者写的那本书,就是《Lua 程序设计》,里面专门有讲 weak table
2019-06-24 - HelloBug为什么table的下标是数字时,设置弱表属性是key,不会对其进行垃圾回收,而是table和function时会对其进行垃圾回收?2019-06-2612
- HelloBug开篇讲解弱表的例子中,如果table中有对Foo的引用,不是说明Foo占用的内存是有用的吗?为什么要释放Foo占用的内存?什么时候会对其进行了引用,反倒希望设置弱表属性,希望GC对其进行垃圾回收呢?2019-06-262