Chủ đề Rust quan trọng
Rust Closures
Functions without a name that remember the variables around them.
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) → 15make_adder(5)add_five(1) → 6A 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
- A closure can use variables from where it was created.
- move makes it own what it captures.
- A closure that changes a variable must be mut.
Ví dụ Rust chạy được
Rust
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}");
}
42
15
6
counter = 2Luyệ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ến độ của bạn đang được lưu trong trình duyệt này Đăng nhập để giữ tiến độ trên mọi thiết bị.
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