Lección 18 / 20

Closures (funciones anónimas)

En esta lección crearás una función sin nombre y se la pasarás a otra función.

Un closure se escribe entre barras verticales: |price: i32| price + (price / 10). Puede guardarse en una variable y llamarse como cualquier función. El método map() aplica el closure a cada elemento y collect() junta los resultados en una colección nueva.

El código de ejemplo define un cálculo de impuesto y lo aplica a una lista de precios. El {:?} del println! es el formato de depuración, que es el que sabe imprimir un vector entero.

Lo distintivo del closure frente a una función normal es que puede capturar variables del entorno en el que se creó. Eso es justo lo que lo hace útil, y también lo que obliga a Rust a razonar sobre si lo capturado se toma prestado o se mueve; de ahí vienen los mensajes sobre tiempos de vida cuando un closure sobrevive a lo que capturó.

Fíjate en un detalle: el resultado es [110, 220, 330] porque la división entre enteros descarta los decimales. Con 105 saldría 10 de impuesto, no 10,5. En cálculos de dinero eso importa, y es la razón por la que en producción se trabaja en céntimos con enteros, o con tipos decimales específicos.

📖 Código de referencia
✍️ Tu código
Escribe tu código y pulsa «Ejecutar»

🧪 Este sitio no puede compilar ni ejecutar Rust directamente, así que comprueba al instante si lo que escribiste coincide con el código de referencia (la corrección ocurre por completo en tu navegador; no se envía nada a ningún servidor).

Espacio publicitario (banner)
Espacio publicitario (en el artículo)