mirror of
https://github.com/alrayyes/wiki.git
synced 2024-11-22 19:46:23 +00:00
45 lines
683 B
Markdown
45 lines
683 B
Markdown
---
|
|
date: 20200923
|
|
id: 8353cf5c-2d2d-480a-b957-0e90da847e1c
|
|
title: Rust Closures
|
|
---
|
|
|
|
# Syntax
|
|
|
|
## Long
|
|
|
|
``` rust
|
|
fn main() {
|
|
let double_closure = |num: u32| -> u32 { 2 * num };
|
|
|
|
println!("2 times 3 = {}", double_closure(3));
|
|
}
|
|
```
|
|
|
|
## Abbreviated
|
|
|
|
``` rust
|
|
fn main() {
|
|
let double_closure = |num| 2 * num;
|
|
|
|
println!("2 times 3 = {}", double_closure(3));
|
|
}
|
|
```
|
|
|
|
# Closure variable scope
|
|
|
|
Unlike [Rust functions](20200827170931-functions_macros) Closures can
|
|
capture their environment and access variables from the scope in which
|
|
they're defined:
|
|
|
|
``` rust
|
|
fn main() {
|
|
let x = 4;
|
|
|
|
let equal_to_x = |z| z == x;
|
|
|
|
let y = 4;
|
|
|
|
assert!(equal_to_x(y));
|
|
}
|
|
```
|