Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- trait Stepper {
- fn inc(&mut self) -> ();
- fn get(&self) -> u32;
- }
- // Big Stepper
- struct BigStepper {
- value: u32,
- }
- impl BigStepper {
- fn new() -> BigStepper { BigStepper{ value: 1u32 } }
- }
- impl Stepper for BigStepper {
- fn inc(&mut self) {
- self.value = self.value*3 + 1;
- }
- fn get(&self) -> u32 {
- self.value
- }
- }
- // END Big Stepper
- // Little Stepper
- struct LittleStepper {
- value: u32
- }
- impl LittleStepper {
- fn new() -> LittleStepper { LittleStepper{ value: 0u32 } }
- }
- impl Stepper for LittleStepper {
- fn inc(&mut self) {
- self.value = self.value / 2;
- }
- fn get(&self) -> u32 {
- self.value
- }
- }
- // END Little Stepper
- fn main() {
- let mut big_stepper: Box<Stepper> = Box::new(BigStepper::new());
- let mut little_stepper: Box<Stepper> = Box::new(LittleStepper::new());
- let mut stepper: &mut Box<Stepper> = &mut big_stepper;
- while stepper.get() != 1 {
- stepper.inc();
- println!("{}", stepper.get());
- stepper = match stepper.get() % 2 {
- 0 => &mut little_stepper,
- 1 => &mut big_stepper,
- _ => break
- };
- }
- }
Add Comment
Please, Sign In to add comment