我在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个函数都是线程化的,并且彼此独立运行。
答案 0 :(得分:7)
表可以包含其他表,因此您可以在每条消息中存储所需数量的变量。
而不是:
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)
等等。
答案 1 :(得分:0)
Lua唯一真正的数据结构类型是table,所以你真的别无选择,不使用userdata(C)。但是,表可以是表的键或值。也就是说,嵌套。这就是你获得多个价值的方式。