2014-06-08 2 views

risposta

6

Le funzioni, infatti, sono solo chiamate chiusure. Di seguito sono almeno concettualmente equivalenti:

let foo = { println("hello") } 

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

Questo diventa un po 'più complicato nel caso di utilizzo func dichiarare metodi, come c'è qualche pezzo interessante di zucchero aggiunto riguardo l'inserimento automatico di parametri denominati pubblici, ecc func myMethod(foo:Int, bar:Int, baz:Int) diventa func myMethod(foo:Int, #bar:Int, #baz:Int), ad esempio.

Ma è pur sempre vero che anche i metodi sono solo un caso specifico di chiusure, e se è vero per le chiusure, vale anche per le funzioni e i metodi.

+0

Fondamentalmente come 'function() {...}' in JS? – Jehan

+0

Quasi. In javascript, le chiusure sono funzioni anonime. In Swift, le funzioni sono chiamate chiusure. Ma ammetterò liberamente che questa distinzione è per lo più semantica e non molto importante. – jemmons

+1

"In javascript, le chiusure sono funzioni anonime. In Swift, le funzioni sono chiamate chiusure." Queste due definizioni sono equivalenti. Sembra che non ci siano differenze, semantiche o meno. – Will

6

In primo luogo, cominciamo con definition of Closure, come si trova in Wikipedia:

Nei linguaggi di programmazione, una chiusura (anche la chiusura lessicale o di una funzione chiusura) è una funzione o un riferimento a una funzione insieme ad un riferimento ambiente: una tabella che memorizza un riferimento a ciascuna delle variabili non locali (chiamate anche variabili libere o valori di incremento) di tale funzione .

Chiusura è il termine che viene utilizzato per fare riferimento a una funzione insieme alle variabili dal suo ambiente che "chiude".

La definizione di chiusura a Swift è in linea con lambda e blocchi in altri linguaggi come C# e Ruby.

quanto riguarda la differenza di funzioni, dalle Swift documentation:

funzioni globali e nidificate, come introdotto nelle funzioni, sono in realtà casi particolari di chiusure

Così tutte le funzioni sono chiusure essenzialmente che memorizza riferimenti a variabili nel loro contesto.

Closure expressions sono un modo conveniente di scrivere chiusure e fornisce una sintassi più concisa.

+0

@jemmons - Sto ancora aggiungendo la risposta. – manojlds

+1

@jemmons - true. Di solito eseguo l'iterazione sulle mie risposte, ma ho fatto clic su Invia troppo veloce in questo caso. – manojlds