mirror of
https://github.com/alrayyes/wiki.git
synced 2024-11-23 03:56:23 +00:00
45 lines
668 B
Markdown
45 lines
668 B
Markdown
|
---
|
||
|
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));
|
||
|
}
|
||
|
```
|