lua中的多值表

lua中的多值表,lua,Lua,我在lua做一些并行操作。一个线程用于接收,一个线程用于处理,一个线程用于再次发送。为了在线程之间传递数据,我一直在使用表 遗憾的是,现在我需要传递多个变量。如何创建一个“多值表”(一个每个键可以有多个值的表),而不会对性能造成太大影响,还有比使用表更有效的方法吗 迄今为止的简化代码: sendQueue = {} processQueue = {} function recieveLoop() while true do Wait For recieve

我在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数据结构的唯一实际类型是table,所以如果不使用userdata(C),您真的没有选择。但是,表可以是表的键或值。也就是说,筑巢。这就是获得多个值的方式