Avatar ·

Por qué en Rust no se recomienda aceptar &String, &Vec o &Box como argumentos de funciones?

¡Hola a todos! Empecé a estudiar Rust recientemente y noté algo extraño. En algunos ejemplos de código veo que las funciones aceptan parámetros como `&String`, `&Vec` o `&Box`. Parece lógico — queremos pasar una referencia para no copiar datos. Pero luego me topé con la recomendación de que no se debe hacer así. ¿Por qué? ¡Son solo referencias! Aquí hay un ejemplo que escribí: ```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); } ``` Este código funciona, pero he oído que es mejor usar `&str` en lugar de `&String` y `&[T]` en lugar de `&Vec`. ¿Por qué? `&String` y `&Vec` ya son referencias, no poseen los datos. ¿Cuál es el truco? ¿Hay alguna diferencia en rendimiento o en otra cosa? Explíquenme, por favor, en palabras simples.