Kiki Devlog

클로저 본문

Lua & Roblox/Lua

클로저

kimkiki 2022. 7. 14. 16:08
728x90

아래 코드의 익명함수 기준으로  i 는 전역 변수도, 지역 변수도 아니다.

익명함수가 호출되는 순간 이미 newCounter()함수는 종료됐기 때문에 i 는 유효 범위를 벗어나게 된다.

하지만 이 코드는 제대로 동작하는데, 바로 클로저 때문이다. 

클로저는 함수, 함수에서 필요로 하는 모든 비지역 변수들을 포함하는 것이다. 

그래서 newCounter함수를 다시 호출하면 새 지역변수 i를 다시 만들고 이를 새 클로저로 받아쓰게 된다. 

그래서 C1과 C2는 같은 함수에 대한 다른 클로저가 된다.   

사실 루아에서 함수라고 부르며 호출하는 것들은 클로저다...!

function newCounter()
	local i = 0
    return function() -- 익명함수
    	i = i+1
        return i
    end
end

c1 = newCounter()
print(c1()) --1
print(c1()) --2
c2 = newCounter()
print(c2()) --1

'Lua & Roblox > Lua' 카테고리의 다른 글

지역 함수의 재귀 호출  (0) 2022.07.14
비 지역 변수  (0) 2022.07.14
Comments