Chủ đề Rust quan trọng

Rust Closures

Functions without a name that remember the variables around them.

  • Nâng cao
  • Đọc trong 3 phút
  • 1 ví dụ chạy được
Bạn sẽ học được gì
  • |n| n * 2
  • Capturing variables
  • move and returning closures
Closure → result
|n| n * 2apply(21) → 42
|n| n + bonusapply(5) → 15
make_adder(5)add_five(1) → 6

A function that captures its surroundings

A closure is a function without a name that you can store in a variable or pass to another function. Unlike a normal function, it can use variables from the place where it was created.

|n| n * 2 is a closure with one parameter. add_bonus reads bonus from the surrounding code. move makes the closure own what it captures, which is needed when the closure is returned from make_adder. increment changes counter, so it must be declared mut.

Những điểm quan trọng

  1. A closure can use variables from where it was created.
  2. move makes it own what it captures.
  3. A closure that changes a variable must be mut.

Ví dụ Rust chạy được

Rust
Chạy code →
main.rs
fn apply(value: i32, operation: impl Fn(i32) -> i32) -> i32 {
    operation(value)
}

fn make_adder(amount: i32) -> impl Fn(i32) -> i32 {
    move |value| value + amount
}

fn main() {
    let double = |n| n * 2;
    println!("{}", apply(21, double));

    let bonus = 10;
    let add_bonus = |n| n + bonus; // captures bonus from the environment
    println!("{}", apply(5, add_bonus));

    let add_five = make_adder(5);
    println!("{}", add_five(1));

    let mut counter = 0;
    let mut increment = || counter += 1;
    increment();
    increment();
    println!("counter = {counter}");
}
Lấy nút Run cho ví dụ này Kết quả khi chạy
42
15
6
counter = 2

Luyện tập

Mở ví dụ trong trình biên dịch online, đổi một giá trị hoặc thêm một dòng, rồi đoán kết quả trước khi chạy. Sau đó cố ý làm code bị lỗi và đọc thông báo của trình biên dịch.

Bạn học xong bài này chưa?

Đánh dấu đã học để theo dõi tiến độ của bạn.

Tiếp theo: Modules and Visibility →

Luyện tập với thử thách

Áp dụng kiến thức của bài học này để giải một bài toán thực tế. Mỗi thử thách chạy ngay trên trình duyệt, có kiểm thử tức thì và AI nhận xét.

Tất cả thử thách