나는 책을 읽고있다 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.