Alcance de variable en rust

Hola. Soy nuevo en rust y estoy leyendo el libro de rust. Actualmente intento escribir uno de los ejercicios que propone al final del capítulo.

  • Using a hash map and vectors, create a text interface to allow a user to add employee names to a department in a company; for example, “Add Sally to Engineering” or “Add Amir to Sales.” Then, let the user retrieve a list of all people in a department or all people in the company by department, sorted alphabetically.

Lo estoy haciendo con el poco conocimiento y práctica que tengo en el lenguaje.

El tema es que me está dando un error que no llego a comprender de que se trata. Les paso el código y el error que me da el compilador.

Código:

use std::{collections::HashMap, io, process::Command};


fn main() {
    let mut 
departamentos
: HashMap<&str, Vec<&str>> = HashMap::new();


    loop {
        Command::new("clear").
status
().unwrap();
        println!("Ingrese el comando con la siguiente sintaxis.");
        println!("Agregar <nombre> a <departamento>");
        let mut 
ingreso
 = String::new();
        io::stdin()
            .read_line(&mut 
ingreso
)
            .expect("Error al ingresar datos por teclado.");
        if 
ingreso
.to_lowercase().contains("agregar") && 
ingreso
.to_lowercase().contains("a") {
            let mut 
palabras
 = 
ingreso
.split_whitespace();
            
palabras
.
next
().unwrap();
            match 
palabras
.
next
() {
                Some(clave) => {
                    if !
departamentos
.contains_key(clave) {
                        
departamentos
.
insert
(clave, Vec::new());
                    }
                }
                None => (),
            }
        }
    }
}

Error del compilador:
eduardo@Lenovo:~/code/coders/departamentos-empleados$ cargo run
   Compiling departamentos-empleados v0.1.0 (/home/eduardo/code/coders/departamentos-empleados)
error[E0597]: `ingreso` does not live long enough
  --> src/main.rs:15:32
   |
10 |         let mut ingreso = String::new();
   |             ----------- binding `ingreso` declared here
...
15 |             let mut palabras = ingreso.split_whitespace();
   |                                ^^^^^^^ borrowed value does not live long enough
...
19 |                     if !departamentos.contains_key(clave) {
   |                         ------------- borrow later used here
...
26 |     }
   |     - `ingreso` dropped here while still borrowed

For more information about this error, try `rustc --explain E0597`.
error: could not compile `departamentos-empleados` (bin "departamentos-empleados") due to 1 previous error
eduardo@Lenovo:~/code/coders/departamentos-empleados$ 

Agradecería cualquier ayuda. Muchas gracias!

Posted Dec 30, 2025, 9:13 PM UTC

07
Loading comments…