2012-06-27 3 views
4

루아에서는 다른 변수에 참조로 변수를 어떻게 할당 할 수 있습니까?참조로 루아 변수를 할당하는 방법

예를 들어 : a가 b를 할 수있는 포인터 곳 "A = B"에 해당하고 싶은

배경 :

local a,b,c,d,e,f,g -- lots of variables 

if answer == 1 then 
    -- do stuff with a 
elsif answer == 1 then 
    -- do stuff with b 
. 
. 
. 
: 내가 효과적으로 같은이 사건이

PS. 예를 들어 아래에서 b = a는 값에 의한 것임을 알 수 있습니다. 참고 : 저는 Corona SDK를 사용하고 있습니다.

a = 1 
b = a 
a = 2 
print ("a/b:", a, b) 

-- OUTPUT: a/b: 2 1 

답변

8

편집 : 명확한 게시물 및 예와 관련하여 루아에서 원하는 참조 유형이 없습니다. 변수에서 다른 변수를 참조하려고합니다. 루아에서 변수는 단순히 값의 이름입니다. 그게 전부 야.

다음 작품 b = a가 동일한 테이블 값을 참조 모두 ab 잎 때문에 :

a = { value = "Testing 1,2,3" } 
b = a 

-- b and a now refer to the same table 
print(a.value) -- Testing 1,2,3 
print(b.value) -- Testing 1,2,3 

a = { value = "Duck" } 

-- a now refers to a different table; b is unaffected 
print(a.value) -- Duck 
print(b.value) -- Testing 1,2,3 

당신은 참조로로 루아에있는 모든 변수 할당 생각할 수 있습니다.

이것은 기술적으로 테이블, 함수, 동시 루틴 및 문자열에 해당됩니다. 도 마찬가지 일 수 있습니다.은 숫자, 부울 및 nil에 해당 할 수 있습니다. 이는 이들이 변경 불가능한 유형이기 때문에 프로그램에 관한 한 차이가 없습니다. 예를 들어

:

t = {} 
b = true 
s = "testing 1,2,3" 
f = function() end 

t2 = t -- t2 refers to the same table 
t2.foo = "Donut" 
print(t.foo) -- Donut 

s2 = s -- s2 refers to the same string as s 
f2 = f -- f2 refers to the same function as f 
b2 = b -- b2 contains a copy of b's value, but since it's immutable there's no practical difference 
-- so on and so forth -- 

짧은 버전 : 이것은 단지 루아에서 유저 데이터 및 테이블 변경할 유형에 대한 실제적인 의미를 가지고있다. 두 경우 모두 할당은 값 (개체의 복제본이나 복사본이 아니라 포인터 할당)이 아닌 참조를 복사하는 것입니다.

+1

하지만 난 그냥 시도하고 주요 포스트의 PS의 예제를 넣었습니다 - 당신이 작동하지 않습니다하려는 어떤 – Greg

+0

을 작동하지 않을 것 같다. 루아의 할당은 값에 대한 참조를 복사합니다. 변수는 값을 포함하며 값 자체는 아닙니다. 변수에 대한 포인터/참조를 다른 변수에 저장할 수 없습니다. – Mud

+3

ok 고마워요. 제가하고있는 일이 가능할 것 같아요. 그렇지만 변수를 테이블에 집에 넣을 필요가 있을까요? – Greg

-1

사실 변수는 값의 이름 일뿐입니다. 그러나 테이블의 키를 다루는 경우 변수 이름을 계산할 수 있습니다. 즉, 키 이름을 사용하여 조건부 논리를 수행 할 수 있습니다.

myvars = { a=1, b=2, c=3.14 } 

function choose(input) 
    print(myvars[input]) 
end 

choose('a') 
choose('b') 
a = 'a' 
choose(a) 
b = a 
choose(b) 
a = 'c' 
choose(a) 
choose(b) 

출력 :

1 
2 
1 
1 
3.14 
1 
관련 문제