Feb 01 2023 06:25 AM - edited Feb 01 2023 08:09 AM
Primeros Pasos con Rust
Hola programadores Rust,
¿Qué cambios necesita este programa en Rust para ejecutarse exitosamente?
struct Person {
name: String,
age: u8,
genre: char,
}
fn main() {
// Vector of family members
let family: Vec<Person> = Vec::new();
family.push(Person {
name: "Frank".to_string(),
age: 23,
genre: 'M',
});
family.push(Person {
name: "Carol".to_string(),
age: 25,
genre: 'F',
});
family.push(Person {
name: "Edwin".to_string(),
age: 34,
genre: 'M',
});
// Show current info
println!("-".repeat(50));
for individual in family {
println!("{:?}", individual);
}
// Add family lastname
for member in family {
member.name = member.name + "Thompson";
}
// Increase age by 2
for adult in family {
adult.age += 2;
}
// Show updated info
println!("-".repeat(50));
for individual in family {
match individual {
'M' => {
println!("{} is a man {} years old", individual.name, individual.age);
}
'F' => {
println!(
"{} is a woman {} years old",
individual.name, individual.age
);
}
}
}
}
#rustlang #programming
Feb 01 2023 09:55 AM
@edandresvan buenas !
Debajo puedes ver el codigo completo y funcionando. Y un par de detalles sobre los cambios.
En 1er lugar, modifiqué el codigo que escribe lineas en el output por
println!("{}", "-".repeat(50));
En el Struct agregue un atributo para que se pueda mostrar en las sentencias con println!(), e implementé una función Clone() para que se pueda iterar en modo mutable.
#[derive(Debug)]
struct Person {
name: String,
age: u8,
genre: char,
}
// implement Clone for Person struct
impl Clone for Person {
fn clone(&self) -> Self {
Self {
name: self.name.clone(),
age: self.age,
genre: self.genre,
}
}
}
Y cambié la forma en la que iteras por los elementos del for each. Lo puedes ver todo en el código completo.
#[derive(Debug)]
struct Person {
name: String,
age: u8,
genre: char,
}
// implement Clone for Person struct
impl Clone for Person {
fn clone(&self) -> Self {
Self {
name: self.name.clone(),
age: self.age,
genre: self.genre,
}
}
}
fn main() {
// Vector of family members
let mut family: Vec<Person> = Vec::new();
family.push(Person {
name: "Alice".to_string(),
age: 20,
genre: 'F',
});
family.push(Person {
name: "Carol".to_string(),
age: 25,
genre: 'F',
});
family.push(Person {
name: "Edwin".to_string(),
age: 34,
genre: 'M',
});
// Show current info
println!("{}", "-".repeat(50));
println!("Show current information");
println!("{}", "-".repeat(50));
for individual in &family {
println!("{:#?}", individual);
}
println!("{}", "-".repeat(50));
// Iterate through Family and add a family lastname to the field name
for individual in &mut family {
individual.name = format!("{} {}", individual.name, "Thompson");
}
println!("{}", "-".repeat(50));
println!("Show new information after adding the last name");
println!("{}", "-".repeat(50));
for individual in &family {
println!("{:#?}", individual);
}
println!("{}", "-".repeat(50));
// rest of the code goes here ...
}
Queda completar los últimos pasos. Si tienes problemas o dudas con esos, me avisas !
Un saludo !
Feb 01 2023 03:03 PM - edited Feb 01 2023 03:07 PM
Hola profe Bruno, gracias por tu respuesta. Estuve probando y ya pude ejecutar el programa con las correcciones.
Adicionalmente, quería compartir lo que encontré mientras probaba el código:
1. Se puede cambiar el nombre de la mascota de estas dos formas:
member.name = format!("{} {}", member.name, "Thompson");
member.name.push_str(" Thompson");
2. Para mostrar una mascota usando la característica de Debug, se puede usar esta sintaxis:
println!("{:?}", individual);
println!("{individual:?}");
Programa Rust corregido:
#[derive(Debug)]
struct Person {
name: String,
age: u8,
genre: char,
}
fn main() {
// Vector of family members
let mut family: Vec<Person> = Vec::new();
family.push(Person {
name: "Frank".to_string(),
age: 23,
genre: 'M',
});
family.push(Person {
name: "Carol".to_string(),
age: 25,
genre: 'F',
});
family.push(Person {
name: "Edwin".to_string(),
age: 34,
genre: 'M',
});
// Show current info
println!("{}", "-".repeat(50));
for individual in &family {
println!("{individual:?}");
}
// Add family lastname
for member in &mut family {
member.name.push_str(" Thompson");
//member.name = format!("{} {}", member.name, "Thompson");
}
// Increase age by 2
for adult in &mut family {
adult.age += 2;
}
// Show updated info
println!("{}", "-".repeat(50));
for individual in family {
match individual.genre {
'M' => {
println!("{} is a man {} years old", individual.name, individual.age);
}
'F' => {
println!(
"{} is a woman {} years old",
individual.name, individual.age
);
}
_ => {
println!("{} is {} years old", individual.name, individual.age);
}
}
}
}