Jika Anda ingin argumen bernama dan nilai default seperti PHP atau Python, Anda dapat memanggil fungsi Anda dengan konstruktor tabel:
myfunction{a,b=3,c=2}
(Ini terlihat di banyak tempat di Lua, seperti bentuk lanjutan dari modul protokol dan konstruktor LuaSocket di IUPLua .)
Fungsi itu sendiri bisa memiliki tanda tangan seperti ini:
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
Setiap nilai yang hilang dari tabel parameter akan diambil dari __index
tabel di metatabelnya (lihat dokumentasi tentang tabel metatabel ).
Tentu saja, gaya parameter yang lebih canggih dapat dilakukan dengan menggunakan konstruktor dan fungsi tabel - Anda dapat menulis apa pun yang Anda butuhkan. Misalnya, berikut adalah fungsi yang membangun fungsi yang mengambil tabel argumen bernama-atau-posisi dari tabel yang mendefinisikan nama parameter dan nilai default dan fungsi yang mengambil daftar argumen biasa.
Sebagai fitur tingkat non-bahasa, panggilan tersebut dapat diubah untuk memberikan perilaku dan semantik baru:
- Variabel dapat dibuat untuk menerima lebih dari satu nama
- Variabel posisi dan variabel kata kunci dapat diselingi - dan mendefinisikan keduanya dapat mendahulukan (atau menyebabkan kesalahan)
- Variabel tanpa posisi hanya kata kunci dapat dibuat, serta variabel khusus posisi tanpa nama
- Konstruksi tabel yang cukup bertele-tele dapat dilakukan dengan mengurai string
- Daftar argumen dapat digunakan secara verbatim jika fungsinya dipanggil dengan sesuatu selain 1 tabel
Beberapa fungsi yang berguna untuk menulis penerjemah argumen adalah unpack
(pindah ke table.unpack
5.2), setfenv
(usang di 5.2 dengan _ENV
konstruksi baru ), dan select
(yang mengembalikan satu nilai dari daftar argumen yang diberikan, atau panjang daftar dengan '#'
).