2012-05-16 70 views
0

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

然後同樣爲receiveLoop

所有這些3個功能是帶螺紋的,並彼此獨立地運行。

回答

6

表可以包含其他表,因此您可以根據需要在每條消息中存儲儘可能多的變量。

相反的:

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) 

等等等等。

0

Lua的唯一真正的數據結構類型是表,所以你真的沒有選擇,沒有使用userdata(C)。但是,表可以是表的鍵或值。就是築巢。這就是你如何獲得多個值。