ประเภทสนิมที่แสดงด้วยเครื่องหมายวรรคตอนเดียวคืออะไร?


94

ฉันพบหลายประเภทใน Rust ที่แสดงด้วยเครื่องหมายวรรคตอนเดียว:

'static
'r
'a

ความสำคัญของเครื่องหมายวรรคตอนนั้นคืออะไร? อาจเป็นตัวปรับเปลี่ยนการอ้างอิง ( &)? การพิมพ์ทั่วไปเฉพาะสำหรับการอ้างอิง? ฉันไม่รู้ว่าเอกสารสำหรับเรื่องนี้ซ่อนอยู่ที่ไหน


1
สิ่งเหล่านี้มีชื่อว่า lifetimes: static.rust-lang.org/doc/master/guide-lifetimes.html
Arjan

ลิงก์ในความคิดเห็นก่อนหน้าใช้งานไม่ได้อีกต่อไป ฉันไม่รู้ว่าจะเทียบเท่าหรือไม่: doc.rust-lang.org/book/lifetimes.html
Ellen Spertus

ลิงก์ของ Ellen ก็หยุดทำงานเช่นกันนี่คือลิงก์ใหม่ (ข้อมูล ณ เดือนมิถุนายน 2019): doc.rust-lang.org/book/ch10-03-lifetime-syntax.html

คำตอบ:


75

นี่คือช่วงชีวิตที่มีชื่อของ Rust

อ้างจากภาษาการเขียนโปรแกรม Rust :

ข้อมูลอ้างอิงทุกรายการใน Rust มีอายุการใช้งานซึ่งเป็นขอบเขตที่การอ้างอิงนั้นถูกต้อง อายุการใช้งานของเวลาส่วนใหญ่มีความหมายโดยนัยและอนุมานได้เช่นเดียวกับการอนุมานประเภทเวลาส่วนใหญ่ เช่นเดียวกับเมื่อเราต้องใส่คำอธิบายประกอบประเภทเนื่องจากเป็นไปได้หลายประเภทมีบางกรณีที่อายุการใช้งานของการอ้างอิงอาจเกี่ยวข้องกันในรูปแบบต่างๆกันดังนั้น Rust จึงต้องการให้เราใส่คำอธิบายประกอบความสัมพันธ์โดยใช้พารามิเตอร์อายุการใช้งานทั่วไปเพื่อให้แน่ใจว่า การอ้างอิงจริงที่ใช้ในรันไทม์จะถูกต้องแน่นอน

คำอธิบายประกอบตลอดอายุการใช้งานจะไม่เปลี่ยนระยะเวลาที่การอ้างอิงใด ๆ ที่เกี่ยวข้องมีชีวิตอยู่ ในลักษณะเดียวกับที่ฟังก์ชันสามารถยอมรับประเภทใดก็ได้เมื่อลายเซ็นระบุพารามิเตอร์ประเภททั่วไปฟังก์ชันสามารถยอมรับการอ้างอิงที่มีอายุการใช้งานใด ๆ เมื่อลายเซ็นระบุพารามิเตอร์อายุการใช้งานทั่วไป คำอธิบายประกอบตลอดอายุการใช้งานที่เกี่ยวข้องกับอายุการใช้งานของการอ้างอิงหลายรายการซึ่งกันและกัน

คำอธิบายประกอบในชีวิตมีไวยากรณ์ที่ผิดปกติเล็กน้อย: 'ชื่อของพารามิเตอร์อายุการใช้งานจะต้องเริ่มต้นด้วยเครื่องหมายวรรคตอน ชื่อของพารามิเตอร์อายุการใช้งานมักจะเป็นตัวพิมพ์เล็กทั้งหมดและเช่นเดียวกับประเภททั่วไปชื่อของพารามิเตอร์มักจะสั้นมาก 'aเป็นชื่อที่คนส่วนใหญ่ใช้เป็นค่าเริ่มต้น คำอธิบายประกอบพารามิเตอร์ตลอดอายุการใช้งานจะอยู่หลังการ&อ้างอิงและช่องว่างจะแยกคำอธิบายประกอบตลอดอายุออกจากชนิดของข้อมูลอ้างอิง

กล่าวอีกอย่างหนึ่งว่าอายุการใช้งานจะประมาณช่วงของการดำเนินการซึ่งข้อมูลที่อ้างอิงถึงนั้นถูกต้อง คอมไพเลอร์ Rust จะสรุปอายุการใช้งานที่สั้นที่สุดเพื่อความปลอดภัย หากคุณต้องการบอกคอมไพลเลอร์ว่าข้อมูลอ้างอิงมีอายุการใช้งานนานกว่าค่าประมาณที่สั้นที่สุดคุณสามารถตั้งชื่อได้โดยบอกว่าการอ้างอิงเอาต์พุตมีอายุการใช้งานเท่ากับการอ้างอิงอินพุตที่กำหนด

'staticอายุการใช้งานคืออายุการใช้งานพิเศษซึ่งมีอายุยืนยาวที่สุดของช่วงชีวิตทั้งหมด - ตลอดระยะเวลาของโปรแกรม ตัวอย่างทั่วไปคือสตริง "ตัวอักษร" ที่จะพร้อมใช้งานตลอดช่วงอายุของโปรแกรม / โมดูล

คุณสามารถรับข้อมูลเพิ่มเติมได้จากชุดสไลด์นี้โดยเริ่มตั้งแต่สไลด์ 29

Lifetimes ใน Rustยังกล่าวถึงช่วงชีวิตในเชิงลึก


0

เพื่อเพิ่มคำตอบที่ยอดเยี่ยมของ quux00 ชื่อ lifetimes ยังใช้เพื่อระบุที่มาของตัวแปรที่ยืมคืนไปยังคอมไพเลอร์สนิม

ฟังก์ชั่นนี้

pub fn f(a: &str, b: &str) -> &str {
  b
}

จะไม่รวบรวมเพราะมันส่งกลับค่ายืม แต่ไม่ได้ระบุว่าจะยืมมาจากหรือab

ในการแก้ไขปัญหานี้คุณต้องประกาศอายุการใช้งานที่ระบุชื่อและใช้อายุการใช้งานเดียวกันสำหรับbและประเภทการส่งคืน:

pub fn f<'r>(a: &str, b: &'r str) -> &'r str {
//      ----              ---         ---
  b
}

และใช้ตามที่คาดไว้

f("a", "b")
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.