나는 책을 읽고있다 programming in Lua. 그것은 말했다
클로저는 많은 상황에서 유용한 도구를 제공합니다. 우리가 보았 듯이, 그것들은 sort와 같은 고차 함수에 대한 인수로 유용합니다. 클로저는 newCounter 예제와 같이 다른 함수도 빌드하는 함수에 유용합니다. 이 메커니즘을 통해 Lua 프로그램은 기능적 세계의 정교한 프로그래밍 기술을 통합 할 수 있습니다. 클로저는 콜백 함수에도 유용합니다. 일반적인 GUI 툴킷에서 버튼을 만들 때 일반적인 예가 발생합니다. 각 버튼에는 사용자가 버튼을 누를 때 호출되는 콜백 기능이 있습니다. 다른 버튼을 눌렀을 때 약간 다른 작업을 수행하려고합니다. 예를 들어, 디지털 계산기에는 숫자마다 하나씩 10 개의 유사한 버튼이 필요합니다. 다음과 같은 기능으로 각각을 만들 수 있습니다.
function digitButton (digit)
return Button{label = tostring(digit),
action = function ()
add_to_display(digit)
end}
end
를 호출하면 (이것은 클로저를 생성합니다)를 digitButton반환 action하므로 digit전달 된에 액세스 할 수 있습니다 digitButton.
내 질문은 :
Why we need call back functions? what situations can I apply this to?
저자는 말했다 :
이 예제에서는 Button이 새 버튼을 만드는 툴킷 함수라고 가정합니다. label은 버튼 레이블입니다. action은 버튼을 눌렀을 때 호출되는 콜백 클로저입니다. digitButton이 작업을 수행 한 후 로컬 변수 숫자가 범위를 벗어난 후 콜백을 오랫동안 호출 할 수 있지만 여전히이 변수에 액세스 할 수 있습니다.
저자에 따르면 비슷한 예가 다음과 같다고 생각합니다.
function Button(t)
-- maybe you should set the button here
return t.action -- so that you can call this later
end
function add_to_display(digit)
print ("Display the button label: " .. tostring(digit))
end
function digitButton(digit)
return Button{label = tostring(digit),
action = function ()
add_to_display(digit)
end}
end
click_action = digitButton(10)
click_action()
그러므로, the callback can be called a long time after digitButton did its task and after the local variable digit went out of scope.