कोड संगठन से संबंधित कारणों के लिए, मैं संकलक की जरूरत है निम्नलिखित (सरलीकृत) कोड स्वीकार करने के लिए:जब वेक्टर के बाद उधारित मूल्य बनाए जाते हैं तो मैं वेक्टर में संदर्भ कैसे जोड़ूं?
fn f() {
let mut vec = Vec::new();
let a = 0;
vec.push(&a);
let b = 0;
vec.push(&b);
// Use `vec`
}
संकलक शिकायत
error: `a` does not live long enough
--> src/main.rs:8:1
|
4 | vec.push(&a);
| - borrow occurs here
...
8 | }
|^`a` dropped here while still borrowed
|
= note: values in a scope are dropped in the opposite order they are created
error: `b` does not live long enough
--> src/main.rs:8:1
|
6 | vec.push(&b);
| - borrow occurs here
7 | // Use `vec`
8 | }
|^`b` dropped here while still borrowed
|
= note: values in a scope are dropped in the opposite order they are created
हालांकि, मैं एक कठिन समय को समझाने आ रही हैं वेक्टर को संदर्भित करने से पहले वेक्टर को छोड़ने के लिए कंपाइलर। vec.clear()
काम नहीं करता है, और न ही drop(vec)
करता है। mem::transmute()
या तो काम नहीं करता है (vec
को 'static
होने के लिए मजबूर करने के लिए)।
मुझे मिला एकमात्र समाधान &'static _
में संदर्भ को ट्रांसमिट करना था। क्या कोई और तरीका है? क्या यह सुरक्षित जंग में संकलित करना भी संभव है?
असल में, कंप्यूटिंग मूल्यों और उन्हें धक्का एक ही मूल्य के लिए एक ही शर्त पर निर्भर कर रहे हैं, लेकिन अलग-अलग मान अलग अलग परिस्थितियों, तो अपनी राशि पहले मामले का अर्थ है 'if' कथन। मूल्यों को वेक्टर में स्थानांतरित नहीं किया जा सकता है क्योंकि वेक्टर में गुण वस्तुओं के संदर्भ होना चाहिए। लेकिन आपका आखिरी मामला ठीक है जो मैं कर रहा हूं। – moatPylon