ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 6 · 2లో పాఠం 1కోర్సులో 11/14~15 min
మాడ్యూల్ పాఠాలు (1/2)

జీవితకాలం మరియు సూచనలు

రస్ట్‌లో, ప్రతి సూచనకు జీవితకాలం ఉంటుంది, ఇది ఆ సూచన చెల్లుబాటు అయ్యే పరిధికి అనుగుణంగా ఉంటుంది. చాలా వరకు, జీవితకాలాలు అవ్యక్తంగా ఉంటాయి మరియు కంపైలర్ జీవితకాల ఎలిషన్ నియమాలకు ధన్యవాదాలు. అయినప్పటికీ, విభిన్న సూచనల జీవితకాలాల మధ్య సంబంధం అస్పష్టంగా ఉన్నప్పుడు, మనం వాటిని స్పష్టంగా ఉల్లేఖించాలి.

జీవితకాలం యొక్క ప్రధాన లక్ష్యం డాంగ్లింగ్ రిఫరెన్స్‌లను నిరోధించడం (మెమొరీ నుండి ఇప్పటికే డీలాకేట్ చేయబడిన డేటాకు సంబంధించిన సూచనలు).


జీవితకాల ఉల్లేఖన సింటాక్స్

జీవితకాల పేర్లు అపాస్ట్రోఫీ (')తో ప్రారంభమవుతాయి మరియు సాధారణంగా చిన్న చిన్న అక్షరాలు ('a వంటివి). జీవితకాల ఉల్లేఖనాలు వేరియబుల్స్ యొక్క వాస్తవ జీవితకాలాన్ని మార్చవు, కానీ అవి ఇన్‌పుట్‌లు మరియు అవుట్‌పుట్‌ల చెల్లుబాటు మధ్య సంబంధాన్ని కంపైలర్‌కు సూచిస్తాయి.

ఉదాహరణకు, ఒక ఫంక్షన్ రెండు స్ట్రింగ్ రిఫరెన్స్ పారామితులను తీసుకుంటే మరియు స్ట్రింగ్ రిఫరెన్స్‌ను తిరిగి ఇస్తే మరియు రెండు ఇన్‌పుట్ పారామీటర్‌లు చెల్లుబాటు అయ్యేంత వరకు రిటర్న్ చేసిన రిఫరెన్స్ చెల్లుబాటు కావాలంటే, మేము ఉపయోగిస్తాము:

Rust
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
    if x.len() > y.len() {
        x
    } else {
        y
    }
}

డేటా స్ట్రక్చర్లలో జీవితకాలం

ఒక నిర్మాణం సూచనగా ఫీల్డ్‌ని కలిగి ఉన్నట్లయితే, స్ట్రక్ట్ ఇన్‌స్టాన్స్ అది సూచించే డేటా కంటే ఎక్కువ కాలం జీవించలేదని నిర్ధారించుకోవడానికి మేము ఆ సూచనపై జీవితకాలాన్ని స్పష్టంగా ఉల్లేఖించాలి:

Rust
struct ImportantExcerpt<'a> {
    part: &'a str,
}

fn main() {
    let novel = String::from("Call me Ishmael. Some years ago...");
    let first_sentence = novel.split('.').next().unwrap();
    let i = ImportantExcerpt {
        part: first_sentence,
    };
}

స్టాటిక్ లైఫ్‌టైమ్

'static జీవితకాలం అనేది ప్రోగ్రామ్ యొక్క మొత్తం వ్యవధి వరకు ఉండే ప్రత్యేక జీవితకాలం. అన్ని స్ట్రింగ్ లిటరల్స్ (&str) పరోక్షంగా 'static జీవితకాలం కలిగి ఉంటాయి ఎందుకంటే అవి నేరుగా బైనరీ ఎక్జిక్యూటబుల్ లోపల నిల్వ చేయబడతాయి.

Rust
let s: &'static str = "I have a static lifetime.";

మీరే ప్రయత్నించండి

వ్యాయామం 1: పొడవైన ఫంక్షన్

వ్యాయామం#rust.m6.l1.e1
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

x రకం &'a str మరియు y రకం &'a str అనే రెండు పారామితులను ఆమోదించే పొడవైన<'a> అనే ఫంక్షన్‌ను వ్రాయండి మరియు రకం &'a str విలువను అందిస్తుంది. ఫంక్షన్ లోపల, దాని పొడవు y కంటే ఎక్కువగా ఉంటే xని తిరిగి ఇవ్వడానికి if/else బ్లాక్‌ని ఉపయోగించండి, లేకపోతే yని తిరిగి ఇవ్వండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

`fn పొడవైన<'a>(x: &'a str, y: &'a str) -> &'a str`తో సంతకాన్ని ప్రకటించండి. ఆపై `if x.len() > y.len() { x } else {y }`ని ఉపయోగించండి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం 2: సూచనలతో నిర్మాణాలు

వ్యాయామం#rust.m6.l1.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

&'a str రకంలో భాగంగా పేరున్న ఒకే ఫీల్డ్‌ని కలిగి ఉన్న ఎక్సెర్ప్ట్<'a> అనే నిర్మాణాన్ని నిర్వచించండి. ప్రధాన ఫంక్షన్‌లో, టెక్స్ట్ అనే స్ట్రింగ్ వేరియబుల్‌ను సృష్టించండి మరియు టెక్స్ట్‌కు సూచనను తీసుకోవడం ద్వారా ఎక్సెర్ప్ట్ టైప్ యొక్క వేరియబుల్ ఎక్సెర్ప్ట్‌ను ఇన్‌స్టాంటియేట్ చేయండి. ప్రింట్ ఎక్సెర్ప్ట్.పార్ట్.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

`struct Excerpt<'a> { part: &'a str }`ఉపయోగించండి. ప్రధానంగా దాన్ని`ఎక్సెర్ప్ట్ { పార్ట్: &టెక్స్ట్ }`తో తక్షణం చేయండి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం 3: స్టాటిక్ రిఫరెన్స్‌లు

వ్యాయామం#rust.m6.l1.e3
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

స్టాటిక్ లైఫ్‌టైమ్ (&'స్టాటిక్ str) కోసం స్పష్టమైన రకం ఉల్లేఖనతో వేరియబుల్ పేరుతో సందేశాన్ని ప్రకటించండి, దానికి స్ట్రింగ్ లిటరల్‌గా కేటాయించండి. సందేశం విలువను ముద్రించండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

స్టాటిక్ జీవితకాలం స్పష్టంగా ఉల్లేఖించడానికి వాక్యనిర్మాణం `లెట్ సందేశాన్ని ఉపయోగించండి: &'static str = 'Messaggio స్టాటికో!';`.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది