সম্পূর্ণরূপে সুনির্দিষ্ট হতে হবে, obj:method(1, 2, 3)
হিসাবে একই
do
local _obj = obj
_obj.method(_obj, 1, 2, 3)
end
স্থানীয় পরিবর্তনশীল কেন? কারণ, অনেকে উল্লেখ করেছেন যে একবারে obj:method()
কেবল সূচকগুলি _ENV
পাওয়া যায় obj
। গতি বিবেচনা করার সময় এটি সাধারণত গুরুত্বপূর্ণ তবে এই পরিস্থিতিটি বিবেচনা করুন:
local tab do
local obj_local = { method = function(self, n) print n end }
tab = setmetatable({}, {__index = function(idx)
print "Accessing "..idx
if idx=="obj" then return obj_local end
end})
end
tab.obj.method(tab.obj, 20)
--> Accessing obj
--> Accessing obj
--> 20
tab.obj:method(10)
--> Accessing obj
--> 10
এখন কল্পনা করুন __index
রূপকটি কেবল কিছু ছাপানোর চেয়ে আরও বেশি কিছু করেছিল। কল্পনা করুন এটি কোনও কাউন্টার বাড়িয়েছে, কোনও ফাইলে কিছু লগ করেছে বা আপনার ডাটাবেস থেকে একটি এলোমেলো ব্যবহারকারীকে মুছে ফেলেছে। দু'বার বা শুধুমাত্র একবার করে করার মধ্যে একটি বড় পার্থক্য রয়েছে। এই ক্ষেত্রে, তার মাঝে একটি পরিষ্কার পার্থক্য obj.method(obj, etc)
এবং obj:method(etc)
।