Rust

Lifetime ขั้นสูง

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

20 คำถามสัมภาษณ์·
Senior
1

Higher-Ranked Trait Bound (HRTB) ใน Rust คืออะไร?

คำตอบ

Higher-Ranked Trait Bound (HRTB) ช่วยให้สามารถระบุได้ว่าฟังก์ชันหรือ trait ต้องทำงานได้กับทุก lifetime ที่เป็นไปได้ ไม่ใช่เฉพาะ lifetime ใด lifetime หนึ่ง ไวยากรณ์ for<'a> บ่งบอกว่า trait bound ต้องเป็นจริงสำหรับ lifetime 'a ใด ๆ ที่ผู้เรียกเลือก คุณสมบัตินี้จำเป็นอย่างยิ่งสำหรับ closure และ callback ที่ต้องรับ reference ที่มี lifetime หลากหลาย

2

ความแตกต่างระหว่าง fn foo<'a>(f: impl Fn(&'a str)) และ fn foo(f: impl for<'a> Fn(&'a str)) คืออะไร?

คำตอบ

ด้วย fn foo<'a> lifetime 'a จะถูกกำหนดโดยผู้เรียกในขณะเรียกและคงเดิมตลอดการทำงาน ส่วน for<'a> closure ต้องทำงานได้กับ lifetime ใด ๆ ซึ่งทำให้สามารถเรียกได้หลายครั้งด้วย reference ที่มี lifetime ต่างกัน ความแตกต่างนี้สำคัญอย่างยิ่งสำหรับ API ที่เรียก closure หลายครั้งด้วย reference ชั่วคราวที่ต่างกัน

3

lifetime subtyping ใน Rust คืออะไร และ 'a: 'b หมายความว่าอย่างไร?

คำตอบ

lifetime subtyping สร้างความสัมพันธ์แบบ subtyping ระหว่าง lifetime สัญกรณ์ 'a: 'b หมายความว่า 'a มีอายุอย่างน้อยเท่ากับ 'b ดังนั้น 'a จึงเป็น subtype ของ 'b reference ที่มี lifetime ยาวกว่าสามารถใช้ในที่ที่คาดหวัง lifetime ที่สั้นกว่าได้ ความสัมพันธ์นี้เป็นแบบ covariant สำหรับ reference ที่ไม่เปลี่ยนแปลง ทำให้สามารถส่ง reference ที่มี lifetime ยาวกว่าในที่ที่ lifetime ที่สั้นกว่าก็เพียงพอ

4

variance ใน Rust คืออะไร และส่งผลต่อ generic type อย่างไร?

5

ทำไม &mut T จึงเป็น invariant เมื่อเทียบกับ T ในขณะที่ &T เป็น covariant?

+17 คำถามสัมภาษณ์

เชี่ยวชาญ Rust สำหรับการสัมภาษณ์ครั้งถัดไป

เข้าถึงคำถามทั้งหมด flashcards แบบทดสอบเทคนิค แบบฝึกหัด code review และตัวจำลองสัมภาษณ์

เริ่มใช้ฟรี