lua - lua中的多值表

标签 lua

我正在 lua 中做一些并行操作。一个线程用于接收,一个用于处理,一个用于再次发送。为了在线程之间传递数据,我一直在使用表。

遗憾的是,现在我需要传递多个变量。我如何创建一个“多值表”(一个每个键可以有多个值的表)而不会对性能产生太大影响,还有比使用表更有效的方法吗?

到目前为止的简化代码:

sendQueue = {}
processQueue = {}

function recieveLoop()
    while true do
        Wait For recieve
        table.insert(processQueue, recievedText)
    end
end

function processLoop(sender, text, raw)
    while true do
        for key,value in pairs(processQueue) do
            processData
            table.insert(recieveQueue, raw)
        end
    end
end

然后对于 receiveLoop 也是如此

所有这 3 个函数都是线程化的,并且彼此独立运行。

最佳答案

表可以包含其他表,因此您可以在每条消息中存储所需数量的变量。

代替:

table.insert(queue, datum1)

你可以拥有:

local message = {datum1, datum2}
table.insert(queue, message)

或者简单地说:

table.insert(queue, {datum1, datum2})

根据需要在消息中包含尽可能多的“部分”。在接收端,可以通过索引来查看消息部分:

print('foo:', message[1], 'bar:', message[2])

或者解压元素:

local foo, bar = unpack(message) -- this is `table.unpack` in Lua 5.2
print('foo:', foo, 'bar:', bar)

或者您可以在消息中使用命名字段:

local message = {
      foo = datam1,
      bar = datum2,
}
table.insert(queue, message)

等等等等。

关于lua - lua中的多值表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10627548/

相关文章:

lua - 为什么程序文件中的应用程序不能在 lua 中使用 os.execute 运行?

c - 加载lua文件后静态结构数组打印垃圾

c++ - 如何将用 swig 包装的 c++ 类的实例推送到 lua 堆栈上?

arrays - 用于查找和替换文本的 Lua 字符串库选择

lua - 从文本文件运行 lua 程序

variables - 检测变量的变化并做出相应的响应 [Lua]

math - 在Lua中,如何判断一个数字是否均匀地划分为另一个数字?

lua - Lua中如何请求多行输入

Nginx lua日志位置

ssl - NodeMCU Lua Websockets 安全不适用于 2.0 基线