Rust में &String, &Vec या &Box को फ़ंक्शन आर्गुमेंट के रूप में लेने की अनुशंसा क्यों नहीं की जाती?
सभी को नमस्ते! मैंने हाल ही में Rust सीखना शुरू किया है और एक अजीब चीज़ देखी। कुछ कोड उदाहरणों में, मैं देखता हूँ कि फ़ंक्शन पैरामीटर `&String`, `&Vec` या `&Box` के रूप में लेते हैं। यह तार्किक लगता है — हम डेटा कॉपी न करने के लिए reference देना चाहते हैं। लेकिन फिर मुझे एक सिफारिश मिली कि ऐसा नहीं करना चाहिए। क्यों? ये तो सिर्फ references हैं!
यहाँ मेरा लिखा एक उदाहरण है:
```rust
fn print_string(s: &String) {
println!("{}", s);
}
fn print_vec(v: &Vec) {
for i in v {
println!("{}", i);
}
}
fn main() {
let my_string = String::from("Hello");
let my_vec = vec![1, 2, 3];
print_string(&my_string);
print_vec(&my_vec);
}
```
यह कोड काम करता है, लेकिन मैंने सुना है कि `&String` के बजाय `&str` और `&Vec` के बजाय `&[T]` का उपयोग करना बेहतर है। क्यों? आखिर `&String` और `&Vec` पहले से ही references हैं, वे डेटा के मालिक नहीं हैं। क्या चाल है? क्या प्रदर्शन में अंतर है या कुछ और? कृपया सरल शब्दों में समझाएं।