2011-09-21 36 views
1

我正在開發一個項目,最終用戶將運行Lua,並與使用Python編寫的服務器進行通信,但是我找不到在Lua中需要做的事情。Lua相當於Python list.pop()?

摘要:我爲程序提供了「收件人命令,參數,參數發件人」的輸入,獲得包含{「收件人」,「命令,參數,參數」,「發件人」}的列表輸出,然後單獨這些項目變成個體變量。之後,我會將「命令,參數,參數」分隔到另一個列表中,並再次將它們分離爲變量。

我怎麼做的Python中:

test = "server searching,123,456 Guy" #Example 
msglist = test.split() 
recipient = msglist.pop(0) 
msg = msglist.pop(0) 
id = msglist.pop(0) 

cmdArgList = cmd.split(',') 
cmd = cmdArgList.pop(0) 
while len(cmdArgList) > 0: 
    argument = 1 
    locals()["arg" + str(argument)] 
    argument += 1 

任何意見或更好的想法,將不勝感激。

回答

1

標題中的問題是要求一些非常具體的東西:Lua等同於從數組中獲取值並將其刪除。那將是:

theTable = {}; --Fill this as needed 
local theValue = theTable[1]; --Get the value 
table.remove(theTable, 1);  --Remove the value from the table. 

你在你的帖子中提出的問題似乎是非常開放的。

+0

這樣就行了,假設lua的split()創建了一個表。需要額外的線路,但不管。 –

+0

除非你使用一些提供它的Lua模塊,否則Lua沒有'split'功能。它有模式匹配,您可以使用它來實現相同的效果。 –

+0

我發現了一個包含各種拆分功能的頁面,所以彈出窗口就是我真正需要的。而且我肯定有更多的搜索,我可以爲當地人找到一些東西()。 –

0

如果我是你,我不會嘗試移植Python代碼。這裏有一個更簡單的方式來實現在Lua同樣的事情:

local test = "server searching,123,456 Guy" 
local recipient,cmd,args,id = s:match("(.+) (.-),(.+) (.+)") 

這一步recipient後,「服務器」,cmd是「搜索」,args是「123456」和id是「人」。

我真的不明白你想用locals()["arg" + str(argument)]做什麼,顯然你沒有發佈你所有的代碼,因爲一直訪問本地的arg1有點沒用......但是如果你想迭代參數只需要使用string.gmatch

for arg in args:gmatch("[^,]+") do 
    -- whetever you want with arg 
end