我正在 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/