2011-09-21 2 views
1

최종 사용자가 Lua를 실행하고 Python으로 작성된 서버와 통신하는 프로젝트를 진행하고 있지만 루아에서 수행해야 할 작업을 찾을 수 없습니다.파이썬의 Lua에 해당하는 list.pop()?

요약 : "받는 사람 명령, 인수, 인수 보낸 사람"의 입력을 제공하고 { "받는 사람", "명령, 인수, 인수", "보낸 사람"}을 포함하는 목록의 출력을 얻은 다음 분리합니다 개별 변수에 대한 항목. 그 후, 나는 "명령, 인수, 인수"를 다른 목록으로 분리하고이를 다시 변수로 분리합니다. 내가 파이썬에서 그것을 어떻게

은 :

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

제목에있는 질문은 매우 구체적인 것을 요구하고 있습니다. 즉, 배열에서 값을 가져 와서 제거하는 것과 동일한 루아입니다. 즉 :

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

귀하의 게시물에 질문하는 내용은 매우 개방적으로 보입니다.

+0

을, 루아의 분할() 테이블을 생성 가정. 여분의 줄을 쓴다.하지만 상관 없다. –

+0

루아를 제공하는 모듈을 사용하지 않는 한, 루아는'split' 함수를 가지고 있지 않습니다. 그것은 동일한 효과를 얻기 위해 사용할 수있는 패턴 매칭을 가지고 있습니다. –

+0

다양한 분할 기능이 포함 된 페이지를 찾았으므로 정말 필요한 것이 전부였습니다. 그리고 나는 조금 더 많은 검색을 통해 지역민에게 뭔가를 찾을 수 있다고 확신합니다(). –

0

저는 여러분이라면 파이썬 코드를 그대로 포팅하려고하지 않을 것입니다.

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

이 단계 recipient 후, cmd는, args는 "123456"을 id은 "사람"입니다 "검색"은 "서버"입니다 : 여기 루아에서 같은 일을 달성하기 위해 매우 간단한 방법이다.

당신이 인수를 반복하려면 정말 분명히 로컬 arg1 모든 시간을 액세스하는 약간 쓸모가 있기 때문에 모든 코드를 게시하지 않은, 당신은 locals()["arg" + str(argument)]으로 뭘 하려는지 이해 ...하지만하지 않습니다 단지 string.gmatch을 사용합니다 작동합니다

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