lua中的多值表

Del*_*gic 1 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
Run Code Online (Sandbox Code Playgroud)

然后对于receiveLoop也一样

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

Mud*_*Mud 7

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

代替:

table.insert(queue, datum1)
Run Code Online (Sandbox Code Playgroud)

你可以有:

local message = {datum1, datum2}
table.insert(queue, message)
Run Code Online (Sandbox Code Playgroud)

或者干脆:

table.insert(queue, {datum1, datum2})
Run Code Online (Sandbox Code Playgroud)

根据需要在消息中包含尽可能多的"部分".在接收端,您可以按索引引用消息部分:

print('foo:', message[1], 'bar:', message[2])
Run Code Online (Sandbox Code Playgroud)

或解压元​​素:

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

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

local message = {
      foo = datam1,
      bar = datum2,
}
table.insert(queue, message)
Run Code Online (Sandbox Code Playgroud)

等等等等.