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 foo
yukarı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, baz
varsayılan değerini alacaktır 0
.
Yukarıdaki örnekte ilgili bir konu da ki a:foo
olabilir ancak erişilebilir a:
ederken, önek bar
ve baz
bir ö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. ;-)