Bu kalıp, her bir argümana anlamlı isimler atamanıza ve verilmemiş olan argümanlar için varsayılan bir değer sunmanıza izin verir:
function FunctionName(foo, ...)
let bar = a:0 >= 1 ? a:1 : 0
let baz = a:0 >= 2 ? a:2 : 0
...
" Code that makes use of a:foo, bar and baz
Boris Brodski'nin belirttiği gibi:
a:0 geçen isteğe bağlı argümanların sayısını sayar
a:1,, a:2... isteğe bağlı değişkenlere erişelim
Zorunlu argümanlar (sadece fooyukarıdaki örnekte) sayılmaz
condition ? result_if_true : result_if_false birinci terimin doğru olup olmamasına bağlı olarak ikinci veya üçüncü terimi değerlendiren koşullu (üçlü) ifadedir.
Yani üçüncü bir argüman sağlanmazsa, bazvarsayılan değerini alacaktır 0.
Yukarıdaki örnekte ilgili bir konu da ki a:fooolabilir ancak erişilebilir a:ederken, önek barve bazbir öneki olmadan yapabilirsiniz. Bu çok tutarlı olmadığı için, aşağıdaki gibi tüm değişkenleri yerel değişkenlere çekmeyi tercih edebilirsiniz:
function FunctionName(...)
let foo = a:1 " Will throw an error if no arg was provided
let bar = a:0 >= 2 ? a:2 : 0
let baz = a:0 >= 3 ? a:3 : 0
...
" Code that makes use of foo, bar and baz
(Teknik olarak, l:örneğin bir fonksiyon içindeki yerel değişkenlere atıfta bulunmak için önek kullanabilirsiniz l:baz, ancak bu gereksizdir, bu yüzden bunu tavsiye etmem.)
Ancak, bu formu mümkün olduğunca kullanmanız önerilir:
function! s:FunctionName(...)
!(Komut dosyası yeniden yükleyerek örneğin) çalışma zamanında sizin işlevini yeniden tanımlamak sağlar ve s:senaryo kapsamına işlevini sınırlar. Bu, işleve yalnızca komut dosyasının herhangi bir yerinden referans veriliyorsa, küresel ad alanını kirletmeyi (ve çarpışma riskini) önler. Genel olarak görünür olmaları gerekmediğinde işlevleri tanımlamak genellikle tercih edilen bir yoldur. ;-)