
Lifetime ขั้นสูง
Higher-ranked trait bounds (HRTB), lifetime subtyping, variance (covariant, contravariant, invariant), 'static vs 'a, NLL
1Higher-Ranked Trait Bound (HRTB) ใน Rust คืออะไร?
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>(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 ชั่วคราวที่ต่างกัน
3lifetime subtyping ใน Rust คืออะไร และ 'a: 'b หมายความว่าอย่างไร?
lifetime subtyping ใน Rust คืออะไร และ 'a: 'b หมายความว่าอย่างไร?
คำตอบ
lifetime subtyping สร้างความสัมพันธ์แบบ subtyping ระหว่าง lifetime สัญกรณ์ 'a: 'b หมายความว่า 'a มีอายุอย่างน้อยเท่ากับ 'b ดังนั้น 'a จึงเป็น subtype ของ 'b reference ที่มี lifetime ยาวกว่าสามารถใช้ในที่ที่คาดหวัง lifetime ที่สั้นกว่าได้ ความสัมพันธ์นี้เป็นแบบ covariant สำหรับ reference ที่ไม่เปลี่ยนแปลง ทำให้สามารถส่ง reference ที่มี lifetime ยาวกว่าในที่ที่ lifetime ที่สั้นกว่าก็เพียงพอ
variance ใน Rust คืออะไร และส่งผลต่อ generic type อย่างไร?
ทำไม &mut T จึงเป็น invariant เมื่อเทียบกับ T ในขณะที่ &T เป็น covariant?
+17 คำถามสัมภาษณ์
หัวข้อสัมภาษณ์ Rust อื่นๆ
พื้นฐาน Rust
Ownership & Borrowing
Structs & Enums
การจัดการข้อผิดพลาด
คอลเลกชัน
โมดูลและแพ็กเกจ
Traits
Generics
Lifetimes
Iterators & Closures
Smart Pointers
Concurrency Basics
async/await
Testing
Cargo & Ecosystem
Pattern Matching
มาโคร
Serde และการ Serialization
Unsafe Rust
Trait ขั้นสูง
Type System
Tokio & Async I/O
การเพิ่มประสิทธิภาพ
Memory Management
Web Frameworks
Database Integration
Design Pattern ของ Rust
เชี่ยวชาญ Rust สำหรับการสัมภาษณ์ครั้งถัดไป
เข้าถึงคำถามทั้งหมด flashcards แบบทดสอบเทคนิค แบบฝึกหัด code review และตัวจำลองสัมภาษณ์
เริ่มใช้ฟรี