ฉันพบหลายประเภทใน Rust ที่แสดงด้วยเครื่องหมายวรรคตอนเดียว:
'static
'r
'a
ความสำคัญของเครื่องหมายวรรคตอนนั้นคืออะไร? อาจเป็นตัวปรับเปลี่ยนการอ้างอิง ( &
)? การพิมพ์ทั่วไปเฉพาะสำหรับการอ้างอิง? ฉันไม่รู้ว่าเอกสารสำหรับเรื่องนี้ซ่อนอยู่ที่ไหน
ฉันพบหลายประเภทใน Rust ที่แสดงด้วยเครื่องหมายวรรคตอนเดียว:
'static
'r
'a
ความสำคัญของเครื่องหมายวรรคตอนนั้นคืออะไร? อาจเป็นตัวปรับเปลี่ยนการอ้างอิง ( &
)? การพิมพ์ทั่วไปเฉพาะสำหรับการอ้างอิง? ฉันไม่รู้ว่าเอกสารสำหรับเรื่องนี้ซ่อนอยู่ที่ไหน
คำตอบ:
นี่คือช่วงชีวิตที่มีชื่อของ Rust
อ้างจากภาษาการเขียนโปรแกรม Rust :
ข้อมูลอ้างอิงทุกรายการใน Rust มีอายุการใช้งานซึ่งเป็นขอบเขตที่การอ้างอิงนั้นถูกต้อง อายุการใช้งานของเวลาส่วนใหญ่มีความหมายโดยนัยและอนุมานได้เช่นเดียวกับการอนุมานประเภทเวลาส่วนใหญ่ เช่นเดียวกับเมื่อเราต้องใส่คำอธิบายประกอบประเภทเนื่องจากเป็นไปได้หลายประเภทมีบางกรณีที่อายุการใช้งานของการอ้างอิงอาจเกี่ยวข้องกันในรูปแบบต่างๆกันดังนั้น Rust จึงต้องการให้เราใส่คำอธิบายประกอบความสัมพันธ์โดยใช้พารามิเตอร์อายุการใช้งานทั่วไปเพื่อให้แน่ใจว่า การอ้างอิงจริงที่ใช้ในรันไทม์จะถูกต้องแน่นอน
คำอธิบายประกอบตลอดอายุการใช้งานจะไม่เปลี่ยนระยะเวลาที่การอ้างอิงใด ๆ ที่เกี่ยวข้องมีชีวิตอยู่ ในลักษณะเดียวกับที่ฟังก์ชันสามารถยอมรับประเภทใดก็ได้เมื่อลายเซ็นระบุพารามิเตอร์ประเภททั่วไปฟังก์ชันสามารถยอมรับการอ้างอิงที่มีอายุการใช้งานใด ๆ เมื่อลายเซ็นระบุพารามิเตอร์อายุการใช้งานทั่วไป คำอธิบายประกอบตลอดอายุการใช้งานที่เกี่ยวข้องกับอายุการใช้งานของการอ้างอิงหลายรายการซึ่งกันและกัน
คำอธิบายประกอบในชีวิตมีไวยากรณ์ที่ผิดปกติเล็กน้อย:
'
ชื่อของพารามิเตอร์อายุการใช้งานจะต้องเริ่มต้นด้วยเครื่องหมายวรรคตอน ชื่อของพารามิเตอร์อายุการใช้งานมักจะเป็นตัวพิมพ์เล็กทั้งหมดและเช่นเดียวกับประเภททั่วไปชื่อของพารามิเตอร์มักจะสั้นมาก'a
เป็นชื่อที่คนส่วนใหญ่ใช้เป็นค่าเริ่มต้น คำอธิบายประกอบพารามิเตอร์ตลอดอายุการใช้งานจะอยู่หลังการ&
อ้างอิงและช่องว่างจะแยกคำอธิบายประกอบตลอดอายุออกจากชนิดของข้อมูลอ้างอิง
กล่าวอีกอย่างหนึ่งว่าอายุการใช้งานจะประมาณช่วงของการดำเนินการซึ่งข้อมูลที่อ้างอิงถึงนั้นถูกต้อง คอมไพเลอร์ Rust จะสรุปอายุการใช้งานที่สั้นที่สุดเพื่อความปลอดภัย หากคุณต้องการบอกคอมไพลเลอร์ว่าข้อมูลอ้างอิงมีอายุการใช้งานนานกว่าค่าประมาณที่สั้นที่สุดคุณสามารถตั้งชื่อได้โดยบอกว่าการอ้างอิงเอาต์พุตมีอายุการใช้งานเท่ากับการอ้างอิงอินพุตที่กำหนด
'static
อายุการใช้งานคืออายุการใช้งานพิเศษซึ่งมีอายุยืนยาวที่สุดของช่วงชีวิตทั้งหมด - ตลอดระยะเวลาของโปรแกรม ตัวอย่างทั่วไปคือสตริง "ตัวอักษร" ที่จะพร้อมใช้งานตลอดช่วงอายุของโปรแกรม / โมดูล
คุณสามารถรับข้อมูลเพิ่มเติมได้จากชุดสไลด์นี้โดยเริ่มตั้งแต่สไลด์ 29
Lifetimes ใน Rustยังกล่าวถึงช่วงชีวิตในเชิงลึก
เพื่อเพิ่มคำตอบที่ยอดเยี่ยมของ quux00 ชื่อ lifetimes ยังใช้เพื่อระบุที่มาของตัวแปรที่ยืมคืนไปยังคอมไพเลอร์สนิม
ฟังก์ชั่นนี้
pub fn f(a: &str, b: &str) -> &str {
b
}
จะไม่รวบรวมเพราะมันส่งกลับค่ายืม แต่ไม่ได้ระบุว่าจะยืมมาจากหรือa
b
ในการแก้ไขปัญหานี้คุณต้องประกาศอายุการใช้งานที่ระบุชื่อและใช้อายุการใช้งานเดียวกันสำหรับb
และประเภทการส่งคืน:
pub fn f<'r>(a: &str, b: &'r str) -> &'r str {
// ---- --- ---
b
}
และใช้ตามที่คาดไว้
f("a", "b")