我正在开发一个项目,最终用户将运行Lua,并使用Python编写的服务器进行通信,但我无法找到在Lua中执行我需要做的事情的方法。
总结:我给程序一个“收件人命令,参数,参数发送者”的输入,得到一个包含{“收件人”,“命令,参数,参数”,“发件人”}的列表的输出,然后将它们分开将项目分成单个变量。之后,我将“命令,参数,参数”分成另一个列表,然后再将它们分成变量。
我是如何在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
非常感谢任何建议或更好的想法。
答案 0 :(得分:1)
标题中的问题是要求非常具体的东西:Lua相当于从数组中获取值并将其删除。那将是:
theTable = {}; --Fill this as needed
local theValue = theTable[1]; --Get the value
table.remove(theTable, 1); --Remove the value from the table.
你在帖子中提出的问题似乎非常开放。
答案 1 :(得分:0)
如果我是你,我不会尝试按原样移植Python代码。这是在Lua中实现同样功能的一种更简单的方法:
local test = "server searching,123,456 Guy"
local recipient,cmd,args,id = s:match("(.+) (.-),(.+) (.+)")
此步骤recipient
为“服务器”后,cmd
为“搜索”,args
为“123,456”,id
为“盖伊”。
我真的不明白你要用locals()["arg" + str(argument)]
做什么,显然你没有发布所有代码,因为一直访问本地arg1
有点无用......但是如果你想迭代参数,只需使用string.gmatch
:
for arg in args:gmatch("[^,]+") do
-- whetever you want with arg
end