Using a constructor pattern
No method overloading means that we can only define one new function (which is optional anyway). We could invent different names for our constructors, which is good from the point of view of code documentation. This is demonstrated in the following example:
// see code in Chapter 6/code/constructor_pattern.rs struct Alien { name: &'static str, health: u32, damage: u32 } impl Alien { fn new(s: &'static str, mut h: u32, d: u32) -> Self { if h > 100 { h = 100; } Alien { name: s, health: h, damage: d } } pub fn default() -> Self { Alien::new("Walker", 100, 10) } pub fn give_health(h: u32) -> Self { Alien::new("Zombie", h, 5) } } fn main() { let al1 = Alien{ name: "Bork", health: 100, damage: 5 }; let al2 = Alien::new("Berserk", 150, 15); println!("Alien 1 is a {} and inflicts {} damage points", al1.name, al1.damage); let al3 ...