खोज…


परिचय

बक्से रस्ट का एक बहुत ही महत्वपूर्ण हिस्सा हैं, और हर रैस्टेसियन को पता होना चाहिए कि वे क्या हैं और उनका उपयोग कैसे करना है

एक बॉक्स बनाना

स्थिर रस्ट में आप Box::new फ़ंक्शन का उपयोग करके एक बॉक्स बनाते हैं।

let boxed_int: Box<i32> = Box::new(1);

बॉक्सिंग वैल्यू का उपयोग करना

क्योंकि बॉक्स Deref<Target=T> लागू करते हैं, आप बॉक्स वैल्यू का उपयोग उसी तरह कर सकते हैं, जैसा कि उनके पास होता है।

let boxed_vec = Box::new(vec![1, 2, 3]);
println!("{}", boxed_vec.get(0));

यदि आप एक बॉक्सिंग वैल्यू पर मैच पैटर्न करना चाहते हैं, तो आपको बॉक्स को मैन्युअल रूप से डिरेल करना पड़ सकता है।

struct Point {
    x: i32,
    y: i32,
}

let boxed_point = Box::new(Point { x: 0, y: 0});
// Notice the *. That dereferences the boxed value into just the value
match *boxed_point {
    Point {x, y} => println!("Point is at ({}, {})", x, y),
}

पुनरावर्ती Enums और संरचनाएँ बनाने के लिए बक्से का उपयोग करना

यदि आप कोशिश करते हैं और बॉक्स का उपयोग किए बिना जंग में एक पुनरावर्ती ईनम बनाते हैं, तो आपको यह कहते हुए एक संकलन समय त्रुटि मिलेगी कि एनम का आकार नहीं हो सकता है।

// This gives an error!
enum List {
    Nil,
    Cons(i32, List)
}

Enum के लिए परिभाषित आकार होने के लिए, एक बॉक्स में पुनरावर्ती मूल्य होना चाहिए।

// This works!
enum List {
    Nil,
    Cons(i32, Box<List>)
}

यह काम करता है क्योंकि बॉक्स में हमेशा एक ही आकार होता है कोई फर्क नहीं पड़ता कि टी क्या है, जो रस्ट को सूची को एक आकार देने की अनुमति देता है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow