Avatar ·

Rust में सामान्य ट्रेट को लागू करने वाले ऑब्जेक्ट्स का वेक्टर: कैसे बनाएं और उपयोग करें?

नमस्ते! मैं Rust में नया हूँ और पॉलीमॉर्फिज्म को समझने की कोशिश कर रहा हूँ। मेरे पास `area()` मेथड वाला एक ट्रेट `Shape` है, और कई स्ट्रक्चर्स (`Circle`, `Rectangle`) हैं जो इसे लागू करते हैं। मैं एक ऐसा वेक्टर बनाना चाहता हूँ जो इस ट्रेट को लागू करने वाले विभिन्न प्रकार के ऑब्जेक्ट्स को स्टोर कर सके। C++ या Java में, मैं कुछ इस तरह लिखूंगा `vector shapes;` या `List shapes = new ArrayList<>();`। लेकिन Rust में मैं सीधे `Vec` नहीं लिख सकता — कंपाइलर कहता है कि ट्रेट का साइज़ कंपाइल टाइम पर ज्ञात नहीं है। यहाँ मेरा कोड है जो काम नहीं करता: ```rust trait Shape { fn area(&self) -> f64; } struct Circle { radius: f64, } impl Shape for Circle { fn area(&self) -> f64 { std::f64::consts::PI * self.radius * self.radius } } struct Rectangle { width: f64, height: f64, } impl Shape for Rectangle { fn area(&self) -> f64 { self.width * self.height } } fn main() { // यह काम नहीं करेगा: // let shapes: Vec = vec![ // Circle { radius: 5.0 }, // Rectangle { width: 3.0, height: 4.0 }, // ]; } ``` मैं `Vec>` का उपयोग करके इसे हल कर सकता हूँ, लेकिन मैं समझना चाहता हूँ कि यह क्यों आवश्यक है और क्या कोई अन्य तरीके हैं। क्या कोई समझा सकता है कि Rust में पॉलीमॉर्फिक कलेक्शन कैसे काम करते हैं और `Box` या `&dyn Trait` का उपयोग कब करना चाहिए?