2012-02-28 4 views
2

동적 변수 이름을 읽을 가능성이 있는지 알고 싶습니다. 내 스크립트에 변수를 전달하는 프로그래머가 "in1, in2, in3"등을 호출하기 때문에 루프를 만드는 방법이 있습니다. 각 입력을 개별적으로 처리하는 것이 매우 귀찮습니다.루아에서 동적 변수 이름 읽기

여기까지 내가 지금까지 해봤지만, 그냥 오류가 발생합니다.

for i=1,19,2 do 
myvar[i] = ["in"..i] 
end 

나는 루아에 아주 새로운 해요,하지만 난 솔루션이 그 어려운 일이 아니다 희망 : D

편집 : 오, 내가 당신에게 더 많은 정보를 제공하려고합니다. "Main"프로그램은 루아에서 작성된 것이 아니며 단순히 "in1 ..."변수를 설정합니다. 로봇 식 프로그램 소프트웨어의 일종이며 많은 funkt 빌드가 있습니다. 그래서 모든 변수 이름이나 배열을 단순히 사용할 수는 없습니다. 그래서 루아와 관련된 함수 나 다른 것이 아닙니다 ... 작은 스크린 샷입니다 http://www.bilderload.com/daten/unbenanntFAQET.jpg 루아 스크립트가 첫 번째 입력을 전달합니다.

+0

단지 "그냥 오류가 발생합니다"라고 말하는 대신 정확한 오류를 인쇄하면 도움이됩니다. – kikito

+0

죄송합니다. "2 행 : 예상치 못한 기호 '['" – user1238052

+0

테이블에 변수를 내보낼 수 없습니까? 그것은 사안을 크게 단순화합니다. – jpjacobs

답변

1

이 "동적 변수"를 뱉어내는 코드를 작성한 사람은 누구도 잘 수행하지 못했습니다. 그것들을 갖는 것은 나쁜 습관이며, 데이터 손실, 글로벌 네임 스페이스의 혼란을 초래할 수 있습니다. ...

변경할 수 있으면 결과를 포함하는 테이블을 출력하는 것이 훨씬 낫습니다.

즉, 당신은 당신의 솔루션을 멀리하지는 않지만, ["in"..i]은 유효한 루아 구문이 아닙니다. 당신은 아무 것도 색인하지 않고 있습니다. 이러한 변수가 전역 변수 인 경우 코드는 다음과 같이 읽어야합니다.

for i=1,19,2 do 
    myvar[i] = _G["in"..i] 
end 

이렇게하면 변수에 포함 된 값이 전역 테이블에서 읽혀집니다.

+0

흠, 해봤지만 변수가 글로벌 변수가 아닌 것 같습니다. 나는이 작은 코드를 독자적으로 썼다. 그러나 나는 루아와 지금까지 아무 것도하지 않았다. 난 그냥 논리 elemets을 단순화하기 위해 필요합니다. – user1238052

5

"동적 변수 이름"의 의미에 따라 다릅니다.

로컬 변수의 이름이 존재하지 않습니다. 지역 변수는 함수 매개 변수 또는 local 키워드로 선언 된 변수입니다. 지역 변수는 Lua 스택으로의 오프셋으로 컴파일되므로 이름은 존재하지 않습니다. 가져 오기 위해 이름으로 색인을 생성 할 수 없습니다.

전역 변수는 전역 테이블의 멤버입니다. 따라서, 전역 변수를 설정하려면 다음 방법은 동일합니다 "등 IN3, IN1, IN2"

globalVar = 4 
_G.globalVar = 4 
_G["globalVar"] = 4 

단지 그들을 호출 내 스크립트에 변수를 전달을 programm 이후

스크립트에 변수를 전달하는 프로그램은 이름을 지정하지 않습니다. 변수는 값의 자리 표시 자일뿐입니다. 그 가치에 대한 소유권은 없습니다. 함수가 인수를 얻으면 함수이 함수의 이름을 지정합니다.

당신은 프로그램의 구조에 대해 많이 말하지 않았으므로 좋은 충고를 줄 수는 없습니다. 그러나 매개 변수로 몇 가지 값을 가져 와서 입력으로 액세스하려는 경우 두 가지 방법으로 수행 할 수 있습니다.,

function MyFunc1(theArgs) 
    for i, arg in ipairs(theArgs) do 
    --Do something with arg. 
    end 
end 

function MyFunc2(...) 
    for i, arg in ipairs({...}) do 
    --Do something with arg. 
    end 
end 

MyFunc1 {2, 44, 22} --Can be called with no() because it takes a single value as an expression. The table. 
MyFunc2(2, 44, 22) 
+0

아, 좀 더 자세한 정보를 알려 드리겠습니다. "Main"프로그램은 루아에서 작성된 것이 아니며 단순히 "in1 ..."변수를 설정합니다. 로봇 식 프로그램 소프트웨어의 일종이며 많은 funkt 빌드가 있습니다. 그래서 모든 변수 이름이나 배열을 단순히 사용할 수는 없습니다. 그래서 루아와 관련된 함수 나 다른 것은 아닙니다 ... – user1238052

+0

@ user1238052 : 첫째, 질문에 넣어야합니다. "편집"버튼을 사용하십시오. 둘째, 어떻게 변수를 설정합니까? Lua 함수를 설정하는 데 사용하는 코드를 표시하고 Lua 함수가 어떻게 호출되는지 알려줍니다. –

+0

그것이 문제입니다. 다른 루아 코드는 없습니다! 상황을 명확하게하기 위해 약간의 스크린 샷을 만들었습니다. [link] (http://www.bilderload.com/daten/unbenanntFAQET.jpg) – user1238052

1

myVar에 = {IN1, IN2, IN3, IN4, IN5, IN6, IN7을보십시오 : 당신은 매개 변수로 값을 포함하는 테이블을하거나 가변 인자를 취할 수 있습니다 IN8, IN9, IN10, IN11, IN12, IN13, IN14, IN15, IN16, in17, in18, in19} 변수는 전역 변수로서 전달되면

또는이

myvar = {...} 

변수가 스크립트에 인수로 전달되는 경우.