আমি বইটি পড়ছি programming in Lua
। এটা বলেছে
বন্ধ অনেকগুলি প্রসঙ্গে একটি মূল্যবান সরঞ্জাম সরবরাহ করে। আমরা দেখেছি, এগুলি উচ্চতর অর্ডার ফাংশন যেমন বাছাইয়ের জন্য আর্গুমেন্ট হিসাবে কার্যকর। বন্ধগুলি এমন ফাংশনগুলির জন্য মূল্যবান যেগুলি আমাদের ফাংশনগুলির জন্যও অন্যান্য ফাংশন তৈরি করে, যেমন আমাদের নতুন কাউন্টার উদাহরণ হিসাবে; এই প্রক্রিয়াটি লুয়া প্রোগ্রামগুলিকে কার্যকরী বিশ্ব থেকে পরিশীলিত প্রোগ্রামিং কৌশল যুক্ত করতে দেয়। বন্ধগুলি কলব্যাক ফাংশনের জন্যও কার্যকর। আপনি একটি প্রচলিত জিইআইআই সরঞ্জামদণ্ডে বোতাম তৈরি করার সময় এখানে একটি সাধারণ উদাহরণ দেখা যায়। ব্যবহারকারী যখন বোতাম টিপেন তখন প্রতিটি বোতামের কলব্যাক ফাংশন থাকে; আপনি চাপলে বিভিন্ন বোতামটি কিছুটা ভিন্ন জিনিস করতে চান। উদাহরণস্বরূপ, ডিজিটাল ক্যালকুলেটরের জন্য দশটি অনুরূপ বোতামের প্রয়োজন, প্রতিটি ডিজিটের জন্য একটি। আপনি তাদের প্রত্যেককে এই জাতীয় ক্রিয়া সহ তৈরি করতে পারেন:
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?
লেখক বলেছেন:
এই উদাহরণে, আমরা ধরে নিই যে বাটনটি একটি টুলকিট ফাংশন যা নতুন বোতাম তৈরি করে; লেবেল বোতাম লেবেল; এবং ক্রিয়াটি হ'ল কলব্যাক ক্লোজারটি বোতামটি চাপলে কল করা হবে। ডিজিটবটন তার কাজটি করার পরে এবং স্থানীয় ভেরিয়েবল ডিজিটটি সুযোগের বাইরে চলে যাওয়ার পরে কলব্যাকটিকে অনেক দিন বলা যেতে পারে, তবে এটি এখনও এই পরিবর্তনশীলটিকে অ্যাক্সেস করতে পারে।
লেখকের মতে, আমি মনে করি একটি অনুরূপ উদাহরণ এটির মতো:
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.