2012-03-19 3 views
0

가변 배열 함수 내부에서 배열 컬렉션을 수정하려고합니다. 나는 배열에 추가하려고 할 때 복사본에 대한 작업을 끝내고 호출 후에 길을 잃는다. 루아에서 ref로 값을 전달할 방법이 있습니까?lua 함수 내부에서 배열 수정

function myfunc(...) 
local args = {...} 
--do work on args-- 
end 

"작업 않는다"실제로 아무것도 결국 그러나 잘 기능 밖에 작동하지 않습니다.

분명히 내가 배열의 배열을 전달하고 사용하지 않을 ...하지만 좀 루아에서 사용하는 목적 ...

답변

2

를 격파 수, 당신은 단지 참조 여부 변수를 전달하기 위해 선택할 수 없습니다. 기본 유형은 절대로 숫자와 부울과 같은 참조로 전달되지 않으며 다른 유형은 항상 테이블, 사용자 데이터 및 문자열과 같은 참조로 전달됩니다. 문자열의 경우에는 아무렇게나 변경할 수 없기 때문에 이것은별로 중요하지 않습니다. 지역 주민 이후 전역에이 유일한 작품, 테이블에 보관되지 않습니다

a=2 
b=3 
function myfunc(...) 
    local args={...} 
    for k,v in pairs(args) do 
     _G[v]=_G[v]+k 
    end 
end 
myfunc('a') 
print(a) -- 3 
myfunc('a','b') 
print(a,b) -- 4 5 

참고 :

는 그러니 당신은 당신이이 같은 문자열로 전 세계적으로 작업 할 당신의 인수를 전달합니다. 테이블 작업

은 사물의 종류 덜 고통스러운 수 :

function myfunc(t) 
    for k,v in pairs(t) do 
      t[k]=v+k 
    end 
end 
tab1={a=2} 
myfunc(tab1) 
print(tab1.a) -- 3 
tab2={a=2,b=3} 
myfunc(tab2) 
print(tab2.a,tab2.b) -- 3 5 
0

한 varible에 ... 그룹화되어 전체 매개 변수 목록을 사용하는 목적입니다. 이는 매개 변수의 참조 또는 가치 중심 특성과 관련이 거의 없습니다.

루아의 모든 자연 유형은 테이블을 제외하고는 값으로 전달됩니다.

원하는 것을 수행하는 가장 간단한 방법은 배열 배열을 전달하는 것입니다. 두 개의 추가 문자가 너무 많이 입력 된 것처럼 보이면 대신 괄호를 제거 할 수 있습니다.

foo({a,b,c}) 
foo{a,b,c} -- equivalent 
+1

'테이블 만 예외입니다.'기술적으로 테이블 *의 값은 참조입니다. 표의 * 내용 *은 표의 값과 별개입니다. –