Aprendiendo Rust en público - Funciones (3)
Luego de una pequeña pausa continuamos con el ejercicio 3 de funciones de rustlings.
Comencemos con el ejercicio:
// functions3.rs
fn main() {
call_me();
}
fn call_me(num: i32) {
for i in 0..num {
println!("Ring! Call number {}", i + 1);
}
¿Ya vieron el error?
Veamos que nos dice el compilador.
⚠️ Compiling of exercises/functions/functions3.rs failed! Please try again. Here's the output:
error[E0061]: this function takes 1 parameter but 0 parameters were supplied
--> exercises/functions/functions3.rs:7:5
|
7 | call_me();
| ^^^^^^^^^ expected 1 parameter
...
10 | fn call_me(num: i32) {
| -------------------- defined here
error: aborting due to previous error
For more information about this error, try `rustc --explain E0061`.
¡Exacto! Al declarar la función call_me
le informamos al compilador que la función debía recibir un parámetro de tipo i32
, sin embargo cuando llamamos la función (línea 7 en el ejercicio), no le pasamos ninguno.
Para lograr compilar el ejercicio debemos agregar un parámetro que cumpla con los requisitos de i32.
// functions3.rs
fn main() {
call_me(3);
}
fn call_me(num: i32) {
for i in 0..num {
println!("Ring! Call number {}", i + 1);
}
}
¡Funciona!
Un pequeño detalle que me llamó la atención es que el parametro pedido es de tipo i32, lo que quiere decir que perfectamente podría pasar el valor negativo -3
a la función.
Me surgió entonces la duda, ¿qué significaría iterar de 0 a -3 en pasos de a 1, excluyendo el valor -3???
Primero pensé que el loop me daría algún error, pero no fue así, simplemente el loop no se ejecutó ninguna vez. El valor 0 no cumple con ser menor que el valor final (-3), luego, sale del loop antes de empezar.
Podría ser motivo para un pequeño PR en el repo de ruslings, o al menos para llevarlo a una pequeña discusión al respecto.
A la próxima ya les cuento cómo me fue con eso.
Para seguir esta serie, puedes buscar por el tag #aprendiendo_rust
- Siguiente: Aprendiendo Rust en público - Funciones (4)
- Anterior: Cambiando el rumbo