Câu hỏi phỏng vấn Rust
Câu hỏi

Điều kiện cụ thể để một closure thực thi...

Câu trả lời

Các trait Fn, FnMut, và FnOnce trong Rust đại diện cho các tính chất ngày càng hạn chế hơn về closures/functions, được chỉ ra bởi chữ ký của phương thức call của chúng và đặc biệt là loại của self:

  • FnOnce(self): là các hàm có thể được gọi một lần.
  • FnMut(&mut self): là các hàm có thể được gọi nếu chúng có quyền truy cập &mut đến môi trường của chúng.
  • Fn(&self): là các hàm có thể được gọi nếu chúng chỉ có quyền truy cập & đến môi trường của chúng.

Một closure sẽ tự động thực thi càng nhiều trait này nếu có thể. Nếu một closure chỉ thực thi FnOnce, nó chỉ có thể được gọi một lần. FnMut cho phép chúng được gọi nhiều lần (nếu có quyền truy cập không bị chia sẻ đến đối tượng hàm). Fn cho phép chúng được gọi mọi nơi. Những hạn chế này trực tiếp theo sau từ loại của self và "desugaring" của closures thành structs[2].

Cụ thể, một closure sẽ không thực thi trait Fn nếu nó thay đổi trạng thái của closure trong thân hàm của nó. Điều này làm cho compiler không thực thi Fn trên nó[2].

Trait Fn được kế thừa từ FnMut, và FnMut được kế thừa từ FnOnce. ...

expert

expert

Gợi ý câu hỏi phỏng vấn

middle

Tại sao các tệp thực thi Rust lại lớn đến vậy? Bạn sẽ tối ưu hóa nó như thế nào?

junior

Những sự khác biệt giữa Stringstr trong Rust là gì?

middle

Kiểu String trong Rust có phải là Copy hay Clone?

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào