В Swift концепция замыканий тесно ассоциируется с лямбда-выражениями в C#. Используя пример, где есть функция foo()
(Foo()
в C# из-за различных стандартизированных правил именования), которая принимает лямбду / замыкание, которое имеет два параметра, вы можете написать их следующим образом ...
C#:
Foo( (a, b) => a + b );
Swift:
foo{ a, b in a + b };
Однако Swift также может неявно именовать эти переменные ...
foo{ $0 + $1 };
Обратите внимание, что там нет in
в этом утверждении. Компилятор подтверждает, что если требуется два параметра, то вы должны иметь оба значения $0
и $1
. Если бы было три параметра, это также потребовало бы $2
.
Мне интересно, если C# имеет что-то похожее, где параметры неявно определены.