2016-11-19 5 views
2

함수에 전달하는 테이블을 nil로 설정하려면 어떻게해야합니까? 시도 할 때함수 내에서 함수에 전달 된 테이블 삭제

local t = {} 

function deleteTable(table) 
    table = nil 
end 

deleteTable(t) 

아무런 반응이 없으면 t은 여전히 ​​테이블 값을 가리 킵니다. 함수 내에서 nil으로 전달 된 테이블을 설정할 수있는 방법이 있습니까?

편집 : 테이블의 내용을 삭제하려고하지 않았으므로 테이블에서 가비지 수집되도록 함수 내에서 테이블에 대한 참조를 제거해야했습니다. 나는 실제로 무엇을하려고했는지에 대한 무지에서 미루다.

+0

[Lua에서 테이블을 삭제하는 방법] 가능한 복제본 (http://stackoverflow.com/questions/28061733/how-to-delete-a-table-in-lua) – hjpotter92

+1

또한' 테이블 '을 인수/변수로 사용합니다. 테이블 라이브러리를 겹쳐 씁니다. 이것은 나쁜 습관입니다. – warspyking

+3

@warspyking 숨기기/그림자를 의미 했습니까? – Deduplicator

답변

2

간단히 말해서 테이블을 nil으로 설정할 수 없습니다.
테이블은 테이블입니다.

무엇이 이 테이블을 가리키는 테이블의 변수 또는 슬롯을 nil과 같은 것으로 설정하고 있습니까?
로컬 변수를 참조하는 방법 (debug-api 외부)이 없으며 테이블의 슬롯을 참조하기 위해 테이블과 키가 필요합니다.

그런데 심지어 모두과 같은 참조가 사라지면 테이블이 가비지 수집됩니다.
루아는 수동 메모리 관리를하지 않지만 게으른 가비지 수집을합니다.

+0

제가 테이블을 가리키는 변수를 설정하는 방법은 무엇입니까? 내 프로그램의 함수는 테이블에 대한 참조를 제거하는 것 외에 다른 것들을 수행하기 때문에 함수를 호출하고 그 함수를 사용할 때마다 변수를 nil로 설정하는 것이 지루할 것입니다. 테이블을 참조하는 변수는 하나 뿐이므로 테이블을 즉시 수집 할 필요가 없으므로이 부분은 문제가되지 않습니다. – lugofotw

0

나는 해결책을 찾았다 고 생각합니다. 이 일이 제가하려는 일에 효과가 있습니까? 위의 예에서

local t = {}; 

function removeReference(tab) 
    --do stuff with tab 

    return nil; 
end 

t = removeReference(t); 

I 수 만 할 t = 전무와 함수를 사용하지만 내 프로그램에서 함수가 먼저 테이블에 다른 일을하지; 난 그냥 참조를 제거 결국 싶습니다. 이것이 최고의 해결책입니까, 아니면 더 이상적인 방법입니까?

+0

그래도 작동하지만 "테이블을 제거해야"하는 이유는 무엇입니까? t에는 범위가 있습니다. T가 범위를 벗어날 때까지 테이블을 살릴 수 없습니까? –