Lua эквивалент Python list.pop ()? - PullRequest
1 голос
/ 21 сентября 2011

Я работаю над проектом, в котором конечные пользователи будут запускать 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

Любой совет или лучшеидеи будут с благодарностью.

Ответы [ 2 ]

1 голос
/ 21 сентября 2011

Вопрос в вашем заголовке требует чего-то очень специфического: Lua-эквивалент получения значения из массива и его удаления. Это было бы:

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

Вопрос, который вы задаете в своем посте, кажется очень открытым.

0 голосов
/ 16 января 2013

На вашем месте я бы не пытался портировать код 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
...