Przeczytałem szybko przewodnik programowania w iBooks. Czy ktoś mógłby mi wyjaśnić, jaka jest różnica między funkcją a zamknięciem. Czy to po prostu, że nie ma nazwy i może być używany w wyrażeniach?Jaka jest różnica między funkcjami a zamknięciami?
Odpowiedz
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.
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ę.
- 1. Jaka jest różnica między alertem a window.alert?
- 2. Jaka jest różnica między functools.wraps a update_wrapper
- 3. Jaka jest różnica między zamknięciami i klasami tradycyjnymi?
- 4. Różnica między zamknięciami i kontynuacjami
- 5. Jaka jest różnica między tymi funkcjami utworzonymi przez funkcję "Function"?
- 6. dplyr: jaka jest różnica między funkcjami group_by i group_by_?
- 7. Jaka jest różnica między funkcjami VarIsEmpty i VarIsEmptyParam
- 8. Jaka jest różnica między funkcjami w Karaf i OBR
- 9. Jaka jest różnica między funkcjami porównywania ciągów znaków Delphi?
- 10. Jaka jest różnica między cat_id a term_id?
- 11. Jaka jest różnica między IEnumerable a tablicami?
- 12. Jaka jest różnica między == a === w Verilog?
- 13. Jaka jest różnica między UseCase a Workflow?
- 14. Jaka jest różnica między pakietem a intencją?
- 15. Jaka jest różnica między węzłem a wierzchołkiem?
- 16. Jaka jest różnica między Ember.computed.alias a Ember.binding?
- 17. Jaka jest różnica między @android a android:
- 18. Jaka jest różnica między krotką a kompresją?
- 19. Jaka jest różnica między proxy a reify?
- 20. Jaka jest różnica między @Inject a @PersistenceContext?
- 21. Jaka jest różnica między sqlite3 a pdo_sqlite
- 22. Jaka jest różnica między Const a Constant?
- 23. Jaka jest różnica między Socket.IO a Firebase?
- 24. Jaka jest różnica między macierzą a tablix?
- 25. Jaka jest różnica między KERN_INVALID_ADDRESS a KERN_PROTECTION_FAILURE?
- 26. Jaka jest różnica między Float.POSITIVE_INFINITY a Float.MAX_VALUE?
- 27. Jaka jest różnica między SGML a XML?
- 28. Jaka jest różnica między Cake a Leiningen?
- 29. Jaka jest różnica między JavaBean a POJO?
- 30. Jaka jest różnica między kopiowaniem a klonowaniem?
Zasadniczo podobnie jak 'function() {...}' w JS? – Jehan
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
"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