Avatar ·

Rust में &String, &Vec और &Box को फ़ंक्शन आर्गुमेंट के रूप में लेने की अनुशंसा क्यों नहीं की जाती?

सभी को नमस्ते! मैंने हाल ही में Rust सीखना शुरू किया है और एक अजीब चीज़ देखी: कई गाइड्स और Stack Overflow पर लिखा है कि ऐसे फ़ंक्शन नहीं लिखने चाहिए जो `&String`, `&Vec` या `&Box` लेते हैं। इसके बजाय `&str`, `&[T]` और सिर्फ `&T` (या Box के लिए `&T`) का उपयोग करने की सलाह दी जाती है। लेकिन मुझे समस्या स्पष्ट नहीं है। यहाँ एक सरल उदाहरण है जो मैंने टेक्स्ट के साथ काम करने के लिए लिखा: ```rust fn print_length(s: &String) { println!("स्ट्रिंग की लंबाई: {}", s.len()); } fn main() { let my_string = String::from("नमस्ते, दुनिया!"); print_length(&my_string); } ``` यह कोड काम करता है। इसे खराब शैली क्यों माना जाता है? `&String`, `&str` से बुरा क्यों है? और वैक्टर के साथ भी ऐसा ही: `&Vec`, `&[i32]` से बुरा क्यों है? दोनों मामलों में मैं रेफरेंस पास कर रहा हूँ, स्वामित्व नहीं। मुझे भ्रमित करता है कि अगर मैं `&str` के साथ फ़ंक्शन लिखूँ, तो `String` के साथ कॉल करते समय मुझे हर बार स्पष्ट रूप से टाइप कास्ट करना होगा: `print_length(&my_string[..])` या `print_length(my_string.as_str())`। जबकि `&String` के साथ सब काम करता है।