Por qué en Rust no se recomienda aceptar &String, &Vec y &Box como argumentos de funciones?
¡Hola a todos! Recientemente comencé a aprender Rust y noté algo extraño: en muchos tutoriales y en Stack Overflow escriben que no se deben escribir funciones que acepten `&String`, `&Vec` o `&Box`. En su lugar, recomiendan usar `&str`, `&[T]` y simplemente `&T` (o `&T` para Box). Pero no entiendo bien cuál es el problema.
Aquí hay un ejemplo simple que escribí para trabajar con texto:
```rust
fn print_length(s: &String) {
println!("Longitud de la cadena: {}", s.len());
}
fn main() {
let my_string = String::from("¡Hola, mundo!");
print_length(&my_string);
}
```
Este código funciona. ¿Por qué se considera mal estilo? ¿En qué es peor `&String` que `&str`? Y lo mismo con vectores: ¿en qué es peor `&Vec` que `&[i32]`? Después de todo, en ambos casos estoy pasando una referencia, no la propiedad.
Me confunde que si escribo una función con `&str`, al llamarla con `String` tengo que hacer una conversión explícita cada vez: `print_length(&my_string[..])` o `print_length(my_string.as_str())`. Mientras que con `&String` funciona directamente.
No answers yet.
Inicia sesión para dejar una respuesta