Bir
fonksiyon ya da metot () -> T türünden bir fonksiyon parametresine sahipse
onu hiç küme parantezleri olmadan çağırabiliriz. Bunun için parametre
değişkeninin @autoclosure özniteliği ile niteliklendirilmesi gerekir.
@autoclosure
özniteliklendirmesi yapılmış bir fonksiyon ya da metodu fonksiyon ya da closure
ile çağıramayız. Örneğin:
Swift’te
bir closure kuralı da değer listeleridir (capture value list). Bir closure
bildirimin hemen başında köşeli parantezler içerisinde üst bloklardaki
değişkenler virgül atomlarıyla ayrılmış bir liste yazılabilir. Bu durumda
closure içerisinde bu üst bloktaki değişkenlerin kendileri değil onların
closure bloğuna girişteki değerleri kullanılır.
Örneğin:
Burada
closure’a a ve b’nin kendisi geçirilmiştir. Yani closure çağrıldığında çağrılma
noktasındaki değerleri closure kullanır. Ayrıca dış bloktaki değişkenler let
değilse closure onları aynı zamanda değiştirebilmektedir. Halbuki biz dış
bloklardaki değişkenlerden köşeli parantezler içerisinde bir liste oluşturursak
bu durumda closure bildirimine girişte o değişkenlerin değerleri kopyalanarak
closure’a aktarılır. Ayrıca clouse içerisinde artık biz bu değişkenlerin
değerlerini değiştiremeyiz.
Hiç yorum yok:
Yorum Gönder
Yorumunuz için teşekkür ederim.