Beware of Hash Collisions in Lua Tables
We all know that a Lua table is a hash table, which uses a hash function to map a key into one of the table's slots. However, the result of the hash function is not unique. There exist s...
We all know that a Lua table is a hash table, which uses a hash function to map a key into one of the table's slots. However, the result of the hash function is not unique. There exist s...
游戏服务器使用 Lua 的一个重要原因是 Lua 便于热更. 即使服务器正在运行, 只需让它执行一段代码, 即可重写其中的某些函数, 达到热更新的目的. 例如模块 `app` 有一个函数 `foo` |-----------------------|----------------------------------------------------------------...
When an error occurs, Lua will print a traceback of the call stack, it helps us to find bugs. In many cases, however, a call stack traceback is not enough for us to find out the problem. We ...
我之前的[一篇文章](/2020/05/08/sync-time-zone.html)介绍了怎样在服务器和客户端之间同步时间和时区. 同步时间相对简单些, 本质就是一个时间差; 而时区相对复杂些. 那篇文章介绍的方法有一个问题: 在客户端的时区启用了夏令时的时候, 客户端得到的本地时间会比实际快一个小时. 原因是求客户端时区的方法不对. 例如, 太平洋时区本为 UTC-0800...
熟悉 Lua 的同学都知道, Lua 是允许在 `for ... pairs` 循环中修改和删除表中元素的. 下面这样的代码是没有任何问题的: |---------------------|----------------------------------------------------------------------------------------------...
My game project is written by Lua. However, its framework does not provide a coroutine pattern, it uses a simple callback pattern instead. For example, to send an http request and receive th...
过去笔者一直使用 Lua 5.1, 对 Lua 5.3 中的 `_ENV` 一知半解. 最近新项目中使用了 Lua 5.3, 于是特意研究了下. 这篇文章总结下 Lua 5.3 中的环境和全局变量, `_ENV` 的含义以及与之相关的用法. ### Lua 变量的类型 {#lua-变量的类型} Lua 中的变量可分为局部变量, 上值(upvalue)和全局变量. 经常使用 ...
在项目中由于种种需求经常需要将对象序列化成一个字符串. 由于 Lua 唯一的复合结构是 table, 所以实现起来还是比较简单的. 之前我们的做法是用 Lua 写一个递归函数遍历 table 的键值然后转换成字符串并拼接起来. 然而 Lua 在字符串拼接的过程中会不断地构造字符串对象, 因此这样的实现方式性能较差, 并且会浪费内存, 特别是数据比较大的时候. 一种优化方式是将键...
引言 {#引言} -------- 使用过 Python 的同学都会喜欢上 Python 的装饰器. 它提供一种语法, 对函数进行"声明": |---------------------------|------------------------------------------------------------------------------...
****FBI-Analyzer**** ==================== FBI-Analyzer是一个灵活的日志分析系统,基于golang和lua,插件风格类似ngx-lua。 使用者只需要编写简单的lua逻辑就可以实现golang能实现的所有需求,[++点击++](#%E9%A1%B9%E7%9B%AE%E8%BF%90%E8%A1%8C%E6%B5%81%E...