programming in Lua
ฉันกำลังอ่านหนังสือ มันบอกว่า
การปิดให้บริการเป็นเครื่องมือที่มีคุณค่าในหลายบริบท ดังที่เราได้เห็นพวกมันมีประโยชน์ในการโต้แย้งกับฟังก์ชันลำดับสูงเช่นเรียงลำดับ การปิดเป็นสิ่งที่มีค่าสำหรับฟังก์ชั่นที่สร้างฟังก์ชั่นอื่น ๆ เช่นตัวอย่างตัวนับใหม่ กลไกนี้อนุญาตให้โปรแกรม Lua รวมเทคนิคการเขียนโปรแกรมที่ซับซ้อนจากโลกที่ใช้งานได้ การปิดเป็นประโยชน์สำหรับฟังก์ชั่นการโทรกลับเช่นกัน ตัวอย่างทั่วไปที่นี่เกิดขึ้นเมื่อคุณสร้างปุ่มในชุดเครื่องมือ GUI ทั่วไป แต่ละปุ่มมีฟังก์ชั่นการโทรกลับที่จะถูกเรียกเมื่อผู้ใช้กดปุ่ม; คุณต้องการให้ปุ่มต่าง ๆ ทำสิ่งต่าง ๆ เล็กน้อยเมื่อกด ตัวอย่างเช่นเครื่องคิดเลขดิจิตอลต้องการปุ่มที่คล้ายกันสิบปุ่มสำหรับแต่ละหลัก คุณสามารถสร้างแต่ละคนด้วยฟังก์ชั่นเช่นนี้:
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?
ผู้เขียนกล่าวว่า:
ในตัวอย่างนี้เราสมมติว่าปุ่มเป็นฟังก์ชันชุดเครื่องมือที่สร้างปุ่มใหม่ label คือป้ายของปุ่ม; และการดำเนินการคือการปิดการติดต่อกลับที่จะถูกเรียกเมื่อกดปุ่ม การเรียกกลับสามารถเรียกได้ว่าเป็นเวลานานหลังจากที่ 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.