2014-06-08 28 views

Odpowiedz

6

Funkcje są w rzeczywistości tylko nazwane zamknięciami. Poniżej znajdują się przynajmniej koncepcyjnie równoważne:

let foo = { println("hello") } 

func foo()->(){ println("hello") } 

robi to trochę bardziej skomplikowane w przypadku korzystania func zadeklarować metody, jak jest tam kilka ciekawych bitów dodanego cukru dotyczące automatycznego wstawiania publicznych wymienionych parametrów, itd. func myMethod(foo:Int, bar:Int, baz:Int) staje się na przykład func myMethod(foo:Int, #bar:Int, #baz:Int).

Ale nadal jest prawdą, że nawet metody są tylko konkretnym przypadkiem zamknięć, a jeśli dotyczy to zamknięć, to również w odniesieniu do funkcji i metod.

+0

Zasadniczo podobnie jak 'function() {...}' w JS? – Jehan

+0

Prawie. W javascriptach zamknięcia są anonimowymi funkcjami. W Swift funkcje są nazywane zamknięciami. Ale przyznaję swobodnie, że rozróżnienie ma charakter głównie semantyczny i niezbyt ważny. – jemmons

+1

"W javascriptach zamknięcia są anonimowymi funkcjami, w Swift funkcje nazywa się zamknięciami." Te dwie definicje są równoważne. Wygląda na to, że nie ma różnicy, semantycznej czy innej. – Will

6

pierwsze, zacznijmy definition of Closure, jak znaleźć w Wikipedii:

w językach programowania, zamknięcie (również leksykalny zamknięcie lub funkcja zamknięcia) jest funkcją lub odniesienie do funkcji wraz z bazowania environment - tabela przechowująca odwołanie do każdej ze zmiennych nielokalnych (zwanych również zmiennymi wolnymi lub up tość) tej funkcji .

Zamknięcie to termin używany do odnoszenia się do funkcji wraz ze zmiennymi z jej otoczenia, które "zamyka".

Definicja Zamknięcie w Swift jest inline z lambdas i bloków w innych językach takich jak C# i Ruby.

chodzi o różnicę z funkcji, z Swift documentation:

globalne i zagnieżdżonych funkcji, jak wprowadzone w funkcjach, są rzeczywiście szczególnymi przypadkami zamknięć

więc wszystkie funkcje są zasadniczo closures które przechowują odniesienia do zmiennych w ich kontekście.

Closure expressions to wygodny sposób pisania zamknięć i zapewnia bardziej zwięzłą składnię.

+0

@jemmons - Nadal dodaję odpowiedź. – manojlds

+1

@jemmons - true. Zwykle przeglądam moje odpowiedzi, ale kliknęłam w tym przypadku zbyt szybko. – manojlds

Powiązane problemy