{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Match" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "// Fill the blanks\n", "enum Direction {\n", " East,\n", " West,\n", " North,\n", " South,\n", "}\n", "\n", "fn main() {\n", " let direction = Direction::South;\n", " match direction {\n", " Direction::East => println!(\"East\"),\n", " __ => { // Matching South or North here\n", " println!(\"South or North\");\n", " },\n", " _ => println!(__),\n", " };\n", "}\n", "\n", "main();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "2. Match is an expression, so we can use it in assignments" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fn main() {\n", " let boolean = true;\n", "\n", " // Fill the blank with a match expression:\n", " //\n", " // boolean = true -> binary = 1\n", " // boolean = false -> binary = 0\n", " let binary = __;\n", "\n", " assert_eq!(binary, 1);\n", "\n", " println!(\"Success!\");\n", "}\n", "\n", " main();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "3. Using match to get the data an enum variant holds." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "// Fill in the blanks\n", "enum Message {\n", " Quit,\n", " Move { x: i32, y: i32 },\n", " Write(String),\n", " ChangeColor(i32, i32, i32),\n", "}\n", "\n", "fn main() {\n", " let msgs = [\n", " Message::Quit,\n", " Message::Move{x:1, y:3},\n", " Message::ChangeColor(255,255,0)\n", " ];\n", "\n", " for msg in msgs {\n", " show_message(msg)\n", " }\n", "\n", " println!(\"Success!\");\n", "} \n", "\n", "fn show_message(msg: Message) {\n", " match msg {\n", " __ => { // match Message::Move\n", " assert_eq!(a, 1);\n", " assert_eq!(b, 3);\n", " },\n", " Message::ChangeColor(_, g, b) => {\n", " assert_eq!(g, __);\n", " assert_eq!(b, __);\n", " }\n", " __ => println!(\"no data in these variants\")\n", " }\n", "}\n", "\n", "main();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# If let" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "4." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fn main() {\n", " let o = Some(7);\n", "\n", " // Remove the whole `match` block, using `if let` instead \n", " match o {\n", " Some(i) => {\n", " println!(\"This is a really long string and `{:?}`\", i);\n", "\n", " println!(\"Success!\");\n", " }\n", " _ => {}\n", " };\n", "}\n", "\n", "main();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "5." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "// Fill in the blank\n", "enum Foo {\n", " Bar(u8)\n", "}\n", "\n", "fn main() {\n", " let a = Foo::Bar(1);\n", "\n", " __ {\n", " println!(\"foobar holds the value: {}\", i);\n", "\n", " println!(\"Success!\");\n", " }\n", "}\n", "\n", "main();" ] } ], "metadata": { "kernelspec": { "display_name": "Rust", "language": "rust", "name": "rust" }, "language_info": { "codemirror_mode": "rust", "file_extension": ".rs", "mimetype": "text/rust", "name": "rust", "pygment_lexer": "rust", "version": "" } }, "nbformat": 4, "nbformat_minor": 2 }