• Oct 6, 2024 •LeifMessinger
0 likes • 10 views
trait ATrait { fn a(&mut self) -> &mut A{ self.a() } fn b(&mut self) -> &mut i64{ return self.a().b() } } struct A { b: i64 } impl ATrait for A { fn a(&mut self) -> &mut A{ self } fn b(&mut self) -> &mut i64{ &mut self.b } } struct B { a: A, c: i64 } impl ATrait for B{ fn a(&mut self) -> &mut A{ self.a.a() } } fn main() { let mut b: B = B{ a: A {b: 2}, c: 3 }; println!("{}", b.b()); }
• Aug 15, 2023 •LeifMessinger
1 like • 18 views
struct Beer { bottles: i32, } impl Beer { fn new() -> Beer { Beer { bottles: 99 } } fn take_one_down(&mut self) { self.bottles -= 1; } fn no_more(&self) -> bool { self.bottles == 0 } fn go_to_the_store(&mut self) { self.bottles = 99; } fn to_string(&self) -> String { match self.bottles { 0 => "No more bottles".to_string(), //Reaized this is incorrect because the N could be lowercase. But technically the comma in the beer song is incorrect because it separates two whole sentences and should be a comma 1 => "1 bottle".to_string(), _ => format!("{} bottles", self.bottles), } } } fn main() { let mut bottles: Beer = Beer::new(); let KEEP_GOING: bool = true; let FOREVER: bool = false; let MAX_LOOPS: i32 = 2; let mut int: i32 = 0; while FOREVER | (int < MAX_LOOPS){ print!("{} of beer on the wall, ", bottles.to_string()); println!("{} of beer.", bottles.to_string()); if !bottles.no_more(){ print!("Take one down, pass it around, "); bottles.take_one_down(); println!("{} of beer on the wall.", bottles.to_string()); println!(); } else { print!("Go to the store and buy some more, "); bottles.go_to_the_store(); println!("{} of beer on the wall.", bottles.to_string()); if(!KEEP_GOING){ break; //Comment this out to keep it going }else{ println!(); int += 1; } } } }