From b01ccc1a85953beb94fddf8e3b03e27ce0c9cbcd Mon Sep 17 00:00:00 2001 From: Glen Whitney Date: Sat, 24 Aug 2024 16:45:57 +0000 Subject: [PATCH] Update Examples --- Examples.md | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 85 insertions(+), 4 deletions(-) diff --git a/Examples.md b/Examples.md index aff7a25..897a4da 100644 --- a/Examples.md +++ b/Examples.md @@ -280,9 +280,9 @@ struct Rectangle -fn main() +fn main // Create struct with field init shorthand - let name = s"Peter" // note s-string + let name = s"Peter" //! Note s-string age = 27 peter = Person name, age @@ -383,7 +383,7 @@ enum WebEvent x, y: i64 fn inspect(event: WebEvent) - match event // Note variant auto-import + match event //! Note variant auto-import PageLoad => println! "page loaded" PageUnload => println! "page unloaded" // Destructure `c` from inside the `enum` variant. @@ -397,7 +397,7 @@ fn inspect(event: WebEvent) -fn main() +fn main let pressed = WebEvent::KeyPress 'x' pasted = WebEvent::Paste s"my text" click = WebEvent::Click x: 20, y: 80 @@ -423,10 +423,91 @@ fn main() ``` +use crate::List::*; + +enum List { + Cons(u32, Box), + Nil, +} + +impl List { + fn new() -> List { + Nil + } + + fn prepend(self, elem: u32) -> List { + Cons(elem, Box::new(self)) + } + + fn len(&self) -> u32 { + match self { + Cons(_, tail) => 1 + tail.len(), + Nil => 0 + } + } + + fn stringify(&self) -> String { + match self { + Cons(head, tail) => { + format!("{}, {}", head, tail.stringify()) + }, + Nil => { + format!("Nil") + }, + } + } +} + +fn main() { + let mut list = List::new(); + + list = list.prepend(1); + list = list.prepend(2); + list = list.prepend(3); + + println!("linked list has length: {}", list.len()); + println!("{}", list.stringify()); +} ``` ``` +// use crate::List::*; //! Unneeded bc of match auto-import + +enum List + Cons(u32, Box) + Nil + +impl List + fn new -> List Nil + + fn prepend(self, elem: u32) -> List + Cons elem, Box::new self + + fn len(&self) -> u32 + match self + Cons _, tail => 1 + tail.len() + Nil => 0 + + fn stringify(&self) -> String + match self + Cons head, tail => + format! "{}, {}", head, tail.stringify() + Nil => + format! "Nil" + + + +fn main + let mut list = List::new() + + list = list.prepend(1) + .prepend(2) + .prepend(3) + + println! "linked list has length: {}", list.len() + println! "{}", list.stringify() + ```