หากคุณต้องการอาร์กิวเมนต์ที่ตั้งชื่อและค่าเริ่มต้นเช่น PHP หรือ Python คุณสามารถเรียกใช้ฟังก์ชันของคุณด้วยตัวสร้างตาราง:
myfunction{a,b=3,c=2}
(สิ่งนี้มีให้เห็นในหลาย ๆ ที่ใน Lua เช่นรูปแบบขั้นสูงของโมดูลโปรโตคอลและตัวสร้างของ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
ตารางใน metatable (ดูเอกสารประกอบเกี่ยวกับ metatables )
แน่นอนว่ารูปแบบพารามิเตอร์ขั้นสูงสามารถทำได้โดยใช้ตัวสร้างตารางและฟังก์ชันคุณสามารถเขียนอะไรก็ได้ที่คุณต้องการ ตัวอย่างเช่นนี่คือฟังก์ชันที่สร้างฟังก์ชันที่รับตารางอาร์กิวเมนต์ที่มีชื่อหรือตำแหน่งจากตารางที่กำหนดชื่อพารามิเตอร์และค่าเริ่มต้นและฟังก์ชันที่รับรายการอาร์กิวเมนต์ปกติ
ในฐานะคุณสมบัติที่ไม่ใช่ภาษาระดับการเรียกดังกล่าวสามารถเปลี่ยนแปลงได้เพื่อให้พฤติกรรมและความหมายใหม่:
- ตัวแปรสามารถทำให้ยอมรับได้มากกว่าหนึ่งชื่อ
- ตัวแปรตำแหน่งและตัวแปรคำหลักสามารถสลับกันได้และการกำหนดทั้งสองอย่างสามารถให้ความสำคัญกับอย่างใดอย่างหนึ่ง (หรือทำให้เกิดข้อผิดพลาด)
- สามารถสร้างตัวแปรที่ไม่มีตำแหน่งของคำหลักเท่านั้นและตัวแปรที่ไม่มีตำแหน่งเท่านั้น
- การสร้างตารางที่ค่อนข้างละเอียดสามารถทำได้โดยการแยกวิเคราะห์สตริง
- รายการอาร์กิวเมนต์สามารถใช้คำต่อคำได้หากฟังก์ชันถูกเรียกใช้ด้วยสิ่งอื่นที่ไม่ใช่ 1 ตาราง
ฟังก์ชันที่มีประโยชน์บางอย่างสำหรับการเขียนตัวแปลอาร์กิวเมนต์ ได้แก่unpack
(ย้ายไปที่table.unpack
5.2), setfenv
(เลิกใช้ใน 5.2 พร้อมกับโครงสร้างใหม่_ENV
) และselect
(ซึ่งส่งคืนค่าเดียวจากรายการอาร์กิวเมนต์ที่กำหนดหรือความยาวของรายการด้วย'#'
)