在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

接收循环的代码相同。这三个函数都是线程化的,并互相独立地运行。

原文链接 https://stackoverflow.com/questions/10627548

点赞
stackoverflow用户501459
stackoverflow用户501459

表格可以容纳其他表格,因此您可以在每个消息中存储尽可能多的变量。

例如原来的代码是:

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) -- 这是在Lua 5.2中使用的
print('foo:', foo, 'bar:', bar)

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

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

等等。

2012-05-16 23:18:48
stackoverflow用户798374
stackoverflow用户798374

Lua 的唯一真正的数据结构类型是表格(table),所以如果不使用 userdata(C),你真的没有选择。然而,表格可以是表格的键或值。也就是说,可以嵌套使用表格,这就是获取多个值的方法。

2012-08-03 23:18:58