Adlandırılmış bağımsız değişkenler ve PHP veya Python gibi varsayılan değerler istiyorsanız, işlevinizi bir tablo yapıcısı ile çağırabilirsiniz:
myfunction{a,b=3,c=2}
(Bu gibi Lua birçok yerde, görülür gelişmiş LuaSocket en protokol modülleri formları ve kurucular IUPLua .)
İşlevin kendisinin şu şekilde bir imzası olabilir:
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
Parametre tablosunda eksik olan tüm değerler __index
, metatable tablosundaki tablodan alınacaktır (meta tablolarla ilgili belgelere bakın) ).
Tabi ki, tablo yapıcılarını ve fonksiyonlarını kullanarak daha gelişmiş parametre stilleri mümkündür - ihtiyacınız olanı yazabilirsiniz. Örneğin, burada , parametre adlarını ve varsayılan değerleri tanımlayan bir tablodan adlandırılmış veya konumsal bağımsız değişken tablolarını ve normal bir bağımsız değişken listesi alan bir işlevi oluşturan bir işlev oluşturan bir işlev vardır.
Dil düzeyinde olmayan bir özellik olarak, bu tür çağrılar yeni davranışlar ve anlambilim sağlamak için değiştirilebilir:
- Birden fazla adı kabul edecek şekilde değişkenler yapılabilir
- Konumsal değişkenler ve anahtar kelime değişkenleri arasına serpiştirilebilir ve her ikisini de tanımlamak, bunlardan birine öncelik verebilir (veya bir hataya neden olabilir)
- Yalnızca anahtar kelimeden oluşan konumsuz değişkenlerin yanı sıra yalnızca adsız konum içeren değişkenler yapılabilir
- Oldukça ayrıntılı tablo yapısı, bir dizeyi ayrıştırarak yapılabilir.
- İşlev 1 tablodan başka bir şeyle çağrılırsa, argüman listesi kelimesi kelimesine kullanılabilir.
Argüman çevirmenleri yazmak için bazı yararlı işlevler unpack
( table.unpack
5.2'ye taşınıyor ), setfenv
(5.2'de yeni _ENV
yapıyla kaldırılmıştır ) ve select
(verilen bir bağımsız değişken listesinden tek bir değer veya listenin uzunluğunu döndüren '#'
).