Сравниваю замыкания в
Rust и
Swift. Синтаксис разный, но возможности очень похожи.
Синтаксис:
Rust:
let multiply = |x, y| x * y;
let result = multiply(5, 3); // 15
Swift:
let multiply = { (x: Int, y: Int) in x * y }
let result = multiply(5, 3) // 15
Захват значений:
Rust:
let base = 10;
let add_base = |x| x + base;
println!("{}", add_base(5)); // 15
Swift:
let base = 10
let addBase = { (x: Int) in x + base }
print(addBase(5)) // 15
Использование в функциях:
Rust:
fn calculate(a: i32, b: i32, operation: impl Fn(i32, i32) -> i32) -> i32 {
operation(a, b)
}
let result = calculate(4, 2, |x, y| x + y);
Swift:
func calculate(a: Int, b: Int, operation: (Int, Int) -> Int) -> Int {
operation(a, b)
}
let result = calculate(a: 4, b: 2, operation: { $0 + $1 })
Оба языка автоматически захватывают переменные из области видимости и поддерживают автоматический вывод типов, но синтаксис отличается. В
Rust замыкания более лаконичные, не нужно указывать слово
in, но в
Swift есть удобные сокращенные имена параметров (
$0,
$1).