تمرین: آمار سلامتی
شما در حال پیادهسازی یک سیستم پایش سلامت هستید. به عنوان بخشی از این کار، نیاز دارید تا آمار سلامت کاربران را دنبال کنید.
شما با یک تابع ابتدایی در بلوک impl
و همچنین یک تعریف struct
به نام User
شروع خواهید کرد. هدف شما پیادهسازی متد ابتدایی در struct
User
است که در بلوک impl
تعریف شده است.
کد زیر را به https://play.rust-lang.org/ کپی کنید و متدهای ناقص را تکمیل کنید:
// TODO: این را زمانی که پیادهسازیتان تمام شد حذف کنید. #![allow(unused_variables, dead_code)] #![allow(dead_code)] pub struct User { name: String, age: u32, height: f32, visit_count: usize, last_blood_pressure: Option<(u32, u32)>, } pub struct Measurements { height: f32, blood_pressure: (u32, u32), } pub struct HealthReport<'a> { patient_name: &'a str, visit_count: u32, height_change: f32, blood_pressure_change: Option<(i32, i32)>, } impl User { pub fn new(name: String, age: u32, height: f32) -> Self { Self { name, age, height, visit_count: 0, last_blood_pressure: None } } pub fn visit_doctor(&mut self, measurements: Measurements) -> HealthReport { todo!("بهروزرسانی آمار یک کاربر بر اساس اندازهگیری معبار بازدید از پزشک") } } fn main() { let bob = User::new(String::from("Bob"), 32, 155.2); println!("من {} هستم و سن من {} است", bob.name, bob.age); } #[test] fn test_visit() { let mut bob = User::new(String::from("Bob"), 32, 155.2); assert_eq!(bob.visit_count, 0); let report = bob.visit_doctor(Measurements { height: 156.1, blood_pressure: (120, 80) }); assert_eq!(report.patient_name, "Bob"); assert_eq!(report.visit_count, 1); assert_eq!(report.blood_pressure_change, None); assert!((report.height_change - 0.9).abs() < 0.00001); let report = bob.visit_doctor(Measurements { height: 156.1, blood_pressure: (115, 76) }); assert_eq!(report.visit_count, 2); assert_eq!(report.blood_pressure_change, Some((-5, -4))); assert_eq!(report.height_change, 0.0); }