Rust

Lifetime Nâng Cao

Higher-ranked trait bounds (HRTB), lifetime subtyping, variance (covariant, contravariant, invariant), 'static vs 'a, NLL

20 câu hỏi phỏng vấn·
Senior
1

Higher-Ranked Trait Bound (HRTB) trong Rust là gì?

Câu trả lời

Higher-Ranked Trait Bound (HRTB) cho phép chỉ định rằng một hàm hoặc một trait phải hoạt động cho mọi lifetime có thể, không chỉ một lifetime cụ thể. Cú pháp for<'a> cho biết trait bound phải được thỏa mãn cho bất kỳ lifetime 'a nào do phía gọi lựa chọn. Tính năng này thiết yếu cho các closure và callback cần nhận các tham chiếu với lifetime khác nhau.

2

Sự khác biệt giữa fn foo<'a>(f: impl Fn(&'a str)) và fn foo(f: impl for<'a> Fn(&'a str)) là gì?

Câu trả lời

Với fn foo<'a>, lifetime 'a được phía gọi cố định tại thời điểm gọi và giữ nguyên trong suốt quá trình thực thi. Với for<'a>, closure phải hoạt động cho bất kỳ lifetime nào, cho phép gọi nó nhiều lần với các tham chiếu có lifetime khác nhau. Sự phân biệt này rất quan trọng đối với các API gọi một closure nhiều lần với các tham chiếu tạm thời khác nhau.

3

Lifetime subtyping trong Rust là gì và 'a: 'b có nghĩa là gì?

Câu trả lời

Lifetime subtyping thiết lập một quan hệ subtyping giữa các lifetime. Ký hiệu 'a: 'b nghĩa là 'a sống ít nhất bằng 'b, do đó 'a là một subtype của 'b. Một tham chiếu với lifetime dài hơn có thể được dùng ở nơi mong đợi một lifetime ngắn hơn. Quan hệ này là covariant đối với các tham chiếu bất biến, cho phép truyền một tham chiếu với lifetime dài hơn vào nơi mà một lifetime ngắn hơn là đủ.

4

Variance trong Rust là gì và nó ảnh hưởng đến các kiểu generic như thế nào?

5

Tại sao &mut T lại invariant đối với T trong khi &T lại covariant?

+17 câu hỏi phỏng vấn

Nắm vững Rust cho lần phỏng vấn tiếp theo

Truy cập tất cả câu hỏi, flashcards, bài kiểm tra kỹ thuật, bài tập code review và mô phỏng phỏng vấn.

Bắt đầu miễn phí