Loading...
More Rust Posts
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());}
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 comma1 => "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;}}}}