यदि आप PHP या पाइथन जैसे तर्क और डिफ़ॉल्ट मान चाहते हैं, तो आप अपने कार्य को टेबल कंस्ट्रक्टर के साथ कॉल कर सकते हैं:
myfunction{a,b=3,c=2}
(यह इस तरह के रूप लुआ में कई स्थानों पर, में देखा जाता है LuaSocket के प्रोटोकॉल मॉड्यूल के उन्नत रूपों और में कंस्ट्रक्टर्स IUPLua ।)
फ़ंक्शन में इस तरह से एक हस्ताक्षर हो सकता है:
function myfunction(t)
setmetatable(t,{__index={b=7, c=5}})
local a, b, c =
t[1] or t.a,
t[2] or t.b,
t[3] or t.c
end
मापदंडों की तालिका से गायब किसी भी मान __index
को इसकी मेटािटेबल तालिका में लिया जाएगा ( मेटाटैबल्स पर प्रलेखन देखें )।
बेशक, टेबल कंस्ट्रक्टर और फ़ंक्शंस का उपयोग करके अधिक उन्नत पैरामीटर शैलियां संभव हैं- आप जो भी लिख सकते हैं उसकी आवश्यकता है। उदाहरण के लिए, यहां एक फ़ंक्शन है जो एक फ़ंक्शन का निर्माण करता है जो पैरामीटर नाम और डिफ़ॉल्ट मानों को परिभाषित करने वाली तालिका से नाम-या-स्थितीय तर्क तालिकाओं को लेता है और एक फ़ंक्शन जो एक नियमित तर्क सूची लेता है।
एक गैर-भाषा-स्तरीय सुविधा के रूप में, नए व्यवहार और शब्दार्थ प्रदान करने के लिए इस तरह की कॉल को बदला जा सकता है:
- चर को एक से अधिक नामों को स्वीकार करने के लिए बनाया जा सकता है
- स्थितीय चरों और खोजशब्द चरों को परस्पर जोड़ा जा सकता है - और दोनों को परिभाषित करना या तो पूर्वता दे सकता है (या त्रुटि का कारण हो सकता है)
- कीवर्ड-केवल पोजिशनलेस वैरिएबल बनाए जा सकते हैं, साथ ही नॉर्मल पोजिशन-ओनली भी
- एक स्ट्रिंग को पार्स करके काफी-वर्बोज़ टेबल निर्माण किया जा सकता है
- यदि फ़ंक्शन 1 टेबल के अलावा किसी अन्य चीज़ से कॉल किया जाता है, तो तर्क सूची का उपयोग शब्दशः किया जा सकता है
तर्क अनुवादक लिखने के लिए कुछ उपयोगी कार्य unpack
( table.unpack
5.2 में चल रहे हैं ), setfenv
(नए _ENV
निर्माण के साथ 5.2 में पदावनत ), और select
(जो किसी दिए गए तर्क सूची से एकल मान लौटाता है, या सूची की लंबाई '#'
)।