В чем разница между функциями и замыканиями? [закрытый]
Я читал руководство по программированию swift в iBooks. Может кто-нибудь объяснит мне в чем разница между функцией и закрытие. Это просто, что он не имеет имени и может использоваться в выражениях?
2 ответов
функции, на самом деле, просто называются закрытиями. По крайней мере, концептуально эквивалентны:
let foo = { println("hello") }
func foo()->(){ println("hello") }
это становится немного сложнее в случае использования func
чтобы объявить методы, так как есть некоторые интересные кусочки сахара, добавленные относительно автоматической вставки общедоступных именованных параметров и т. д. func myMethod(foo:Int, bar:Int, baz:Int)
становится func myMethod(foo:Int, #bar:Int, #baz:Int)
, например.
но по-прежнему верно, что даже методы - это просто конкретный случай замыканий, и если это верно для замыканий, это справедливо и для функций и методов.
во-первых, начнем с определение закрытия, как найдено в Википедии:
в языках программирования закрытие (также лексическое закрытие или функция закрытие) является функцией или ссылкой на функцию вместе с a referencing environment-таблица, хранящая ссылку на каждый из нелокальные переменные (также называемые свободными переменными или upvalues) этого функция.
Closure-термин, используемый для обозначения функции вместе с переменными из его среды, которые он "закрывает".
определение закрытия в Swift встроено в лямбда и блоки на других языках, таких как C# и Ruby.
что касается отличия от функций, от Swift документация:
глобальные и вложенные функции, введенные в функции, на самом деле особые случаи закрытия
таким образом, все функции по существу, замыкания, которые хранят ссылки на переменные в их контексте.
Closure expressions
являются удобным способом написания замыканий и обеспечивают более краткий синтаксис.