mirror of
https://github.com/ahgamut/rust-ape-example.git
synced 2024-11-21 15:30:59 +00:00
comment out errors/missings
This commit is contained in:
parent
cfa3e47f54
commit
b9ff887598
21 changed files with 45 additions and 103 deletions
|
@ -1,7 +1,7 @@
|
||||||
// ./src/attribute/cfg/custom.md
|
// ./src/attribute/cfg/custom.md
|
||||||
|
|
||||||
|
/*
|
||||||
#[cfg(some_condition)]
|
#[cfg(some_condition)]*/
|
||||||
fn conditional_function() {
|
fn conditional_function() {
|
||||||
println!("condition met!");
|
println!("condition met!");
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,19 +19,6 @@ fn part0() {
|
||||||
println!("My number is {:?}", num);
|
println!("My number is {:?}", num);
|
||||||
}
|
}
|
||||||
|
|
||||||
use std::convert::From;
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
struct Number {
|
|
||||||
value: i32,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<i32> for Number {
|
|
||||||
fn from(item: i32) -> Self {
|
|
||||||
Number { value: item }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn part1() {
|
fn part1() {
|
||||||
let int = 5;
|
let int = 5;
|
||||||
// Try removing the type declaration
|
// Try removing the type declaration
|
||||||
|
|
|
@ -62,11 +62,6 @@ fn part1() {
|
||||||
let x = Operations::Add;
|
let x = Operations::Add;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum VeryVerboseEnumOfThingsToDoWithNumbers {
|
|
||||||
Add,
|
|
||||||
Subtract,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl VeryVerboseEnumOfThingsToDoWithNumbers {
|
impl VeryVerboseEnumOfThingsToDoWithNumbers {
|
||||||
fn run(&self, x: i32, y: i32) -> i32 {
|
fn run(&self, x: i32, y: i32) -> i32 {
|
||||||
match self {
|
match self {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// ./src/error/abort_unwind.md
|
// ./src/error/abort_unwind.md
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
fn drink(beverage: &str) {
|
fn drink(beverage: &str) {
|
||||||
// You shouldn't drink too much sugary beverages.
|
// You shouldn't drink too much sugary beverages.
|
||||||
if beverage == "lemonade" {
|
if beverage == "lemonade" {
|
||||||
|
@ -15,7 +15,7 @@ fn part0() {
|
||||||
drink("water");
|
drink("water");
|
||||||
drink("lemonade");
|
drink("lemonade");
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
#[cfg(panic = "unwind")]
|
#[cfg(panic = "unwind")]
|
||||||
fn ah(){ println!("Spit it out!!!!");}
|
fn ah(){ println!("Spit it out!!!!");}
|
||||||
|
@ -34,7 +34,7 @@ fn part1() {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
part0();
|
// part0();
|
||||||
part1();
|
part1();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,16 +23,6 @@ fn part0() {
|
||||||
// Error 2: the element doesn't parse to a number
|
// Error 2: the element doesn't parse to a number
|
||||||
}
|
}
|
||||||
|
|
||||||
use std::num::ParseIntError;
|
|
||||||
|
|
||||||
fn double_first(vec: Vec<&str>) -> Result<Option<i32>, ParseIntError> {
|
|
||||||
let opt = vec.first().map(|first| {
|
|
||||||
first.parse::<i32>().map(|n| 2 * n)
|
|
||||||
});
|
|
||||||
|
|
||||||
opt.map_or(Ok(None), |r| r.map(Some))
|
|
||||||
}
|
|
||||||
|
|
||||||
fn part1() {
|
fn part1() {
|
||||||
let numbers = vec!["42", "93", "18"];
|
let numbers = vec!["42", "93", "18"];
|
||||||
let empty = vec![];
|
let empty = vec![];
|
||||||
|
|
|
@ -20,8 +20,6 @@ fn part0() {
|
||||||
// TODO: uncomment the line above to see the compiler error
|
// TODO: uncomment the line above to see the compiler error
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
enum Fruit { Apple, Orange, Banana, Kiwi, Lemon }
|
|
||||||
|
|
||||||
fn part1() {
|
fn part1() {
|
||||||
let apple = Some(Fruit::Apple);
|
let apple = Some(Fruit::Apple);
|
||||||
|
@ -43,8 +41,6 @@ fn part1() {
|
||||||
// first_available_fruit: Some(Kiwi)
|
// first_available_fruit: Some(Kiwi)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
enum Fruit { Apple, Orange, Banana, Kiwi, Lemon }
|
|
||||||
|
|
||||||
fn part2() {
|
fn part2() {
|
||||||
let mut my_fruit: Option<Fruit> = None;
|
let mut my_fruit: Option<Fruit> = None;
|
||||||
|
@ -58,8 +54,6 @@ fn part2() {
|
||||||
// TODO: uncomment the line above to see the compiler error
|
// TODO: uncomment the line above to see the compiler error
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
enum Fruit { Apple, Orange, Banana, Kiwi, Lemon }
|
|
||||||
|
|
||||||
fn part3() {
|
fn part3() {
|
||||||
let mut my_fruit: Option<Fruit> = None;
|
let mut my_fruit: Option<Fruit> = None;
|
||||||
|
|
|
@ -22,32 +22,7 @@ fn part0() {
|
||||||
print(multiply("t", "2"));
|
print(multiply("t", "2"));
|
||||||
}
|
}
|
||||||
|
|
||||||
// To compile and run this example without errors, while using Cargo, change the value
|
|
||||||
// of the `edition` field, in the `[package]` section of the `Cargo.toml` file, to "2015".
|
|
||||||
|
|
||||||
use std::num::ParseIntError;
|
|
||||||
|
|
||||||
fn multiply(first_number_str: &str, second_number_str: &str) -> Result<i32, ParseIntError> {
|
|
||||||
let first_number = try!(first_number_str.parse::<i32>());
|
|
||||||
let second_number = try!(second_number_str.parse::<i32>());
|
|
||||||
|
|
||||||
Ok(first_number * second_number)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn print(result: Result<i32, ParseIntError>) {
|
|
||||||
match result {
|
|
||||||
Ok(n) => println!("n is {}", n),
|
|
||||||
Err(e) => println!("Error: {}", e),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn part1() {
|
|
||||||
print(multiply("10", "2"));
|
|
||||||
print(multiply("t", "2"));
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
part0();
|
part0();
|
||||||
part1();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,18 +35,16 @@ fn part0() {
|
||||||
print(tt);
|
print(tt);
|
||||||
}
|
}
|
||||||
|
|
||||||
use std::num::ParseIntError;
|
|
||||||
|
|
||||||
// As with `Option`, we can use combinators such as `map()`.
|
// As with `Option`, we can use combinators such as `map()`.
|
||||||
// This function is otherwise identical to the one above and reads:
|
// This function is otherwise identical to the one above and reads:
|
||||||
// Modify n if the value is valid, otherwise pass on the error.
|
// Modify n if the value is valid, otherwise pass on the error.
|
||||||
fn multiply(first_number_str: &str, second_number_str: &str) -> Result<i32, ParseIntError> {
|
fn multiply2(first_number_str: &str, second_number_str: &str) -> Result<i32, ParseIntError> {
|
||||||
first_number_str.parse::<i32>().and_then(|first_number| {
|
first_number_str.parse::<i32>().and_then(|first_number| {
|
||||||
second_number_str.parse::<i32>().map(|second_number| first_number * second_number)
|
second_number_str.parse::<i32>().map(|second_number| first_number * second_number)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn print(result: Result<i32, ParseIntError>) {
|
fn print2(result: Result<i32, ParseIntError>) {
|
||||||
match result {
|
match result {
|
||||||
Ok(n) => println!("n is {}", n),
|
Ok(n) => println!("n is {}", n),
|
||||||
Err(e) => println!("Error: {}", e),
|
Err(e) => println!("Error: {}", e),
|
||||||
|
@ -55,11 +53,11 @@ fn print(result: Result<i32, ParseIntError>) {
|
||||||
|
|
||||||
fn part1() {
|
fn part1() {
|
||||||
// This still presents a reasonable answer.
|
// This still presents a reasonable answer.
|
||||||
let twenty = multiply("10", "2");
|
let twenty = multiply2("10", "2");
|
||||||
print(twenty);
|
print(twenty);
|
||||||
|
|
||||||
// The following now provides a much more helpful error message.
|
// The following now provides a much more helpful error message.
|
||||||
let tt = multiply("t", "2");
|
let tt = multiply2("t", "2");
|
||||||
print(tt);
|
print(tt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ fn part0() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Our example enum
|
// Our example enum
|
||||||
enum Foo {
|
enum Foo1 {
|
||||||
Bar,
|
Bar,
|
||||||
Baz,
|
Baz,
|
||||||
Qux(u32)
|
Qux(u32)
|
||||||
|
@ -45,42 +45,42 @@ enum Foo {
|
||||||
|
|
||||||
fn part1() {
|
fn part1() {
|
||||||
// Create example variables
|
// Create example variables
|
||||||
let a = Foo::Bar;
|
let a = Foo1::Bar;
|
||||||
let b = Foo::Baz;
|
let b = Foo1::Baz;
|
||||||
let c = Foo::Qux(100);
|
let c = Foo1::Qux(100);
|
||||||
|
|
||||||
// Variable a matches Foo::Bar
|
// Variable a matches Foo::Bar
|
||||||
if let Foo::Bar = a {
|
if let Foo1::Bar = a {
|
||||||
println!("a is foobar");
|
println!("a is foobar");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Variable b does not match Foo::Bar
|
// Variable b does not match Foo::Bar
|
||||||
// So this will print nothing
|
// So this will print nothing
|
||||||
if let Foo::Bar = b {
|
if let Foo1::Bar = b {
|
||||||
println!("b is foobar");
|
println!("b is foobar");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Variable c matches Foo::Qux which has a value
|
// Variable c matches Foo::Qux which has a value
|
||||||
// Similar to Some() in the previous example
|
// Similar to Some() in the previous example
|
||||||
if let Foo::Qux(value) = c {
|
if let Foo1::Qux(value) = c {
|
||||||
println!("c is {}", value);
|
println!("c is {}", value);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Binding also works with `if let`
|
// Binding also works with `if let`
|
||||||
if let Foo::Qux(value @ 100) = c {
|
if let Foo1::Qux(value @ 100) = c {
|
||||||
println!("c is one hundred");
|
println!("c is one hundred");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This enum purposely neither implements nor derives PartialEq.
|
// This enum purposely neither implements nor derives PartialEq.
|
||||||
// That is why comparing Foo::Bar == a fails below.
|
// That is why comparing Foo::Bar == a fails below.
|
||||||
enum Foo {Bar}
|
enum Foo2 {Bar}
|
||||||
|
|
||||||
fn part2() {
|
fn part2() {
|
||||||
let a = Foo::Bar;
|
let a = Foo2::Bar;
|
||||||
|
|
||||||
// Variable a matches Foo::Bar
|
// Variable a matches Foo::Bar
|
||||||
if Foo::Bar == a {
|
if let Foo2::Bar = a {
|
||||||
// ^-- this causes a compile-time error. Use `if let` instead.
|
// ^-- this causes a compile-time error. Use `if let` instead.
|
||||||
println!("a is foobar");
|
println!("a is foobar");
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ fn part1() {
|
||||||
match number {
|
match number {
|
||||||
i if i == 0 => println!("Zero"),
|
i if i == 0 => println!("Zero"),
|
||||||
i if i > 0 => println!("Greater than zero"),
|
i if i > 0 => println!("Greater than zero"),
|
||||||
// _ => unreachable!("Should never happen."),
|
_ => unreachable!("Should never happen."),
|
||||||
// TODO ^ uncomment to fix compilation
|
// TODO ^ uncomment to fix compilation
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ fn part0() {
|
||||||
|
|
||||||
// Rust even checks to make sure the correct number of arguments are
|
// Rust even checks to make sure the correct number of arguments are
|
||||||
// used.
|
// used.
|
||||||
println!("My name is {0}, {1} {0}", "Bond");
|
// println!("My name is {0}, {1} {0}", "Bond");
|
||||||
// FIXME ^ Add the missing argument: "James"
|
// FIXME ^ Add the missing argument: "James"
|
||||||
|
|
||||||
// Only types that implement fmt::Display can be formatted with `{}`. User-
|
// Only types that implement fmt::Display can be formatted with `{}`. User-
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// ./src/meta/doc.md
|
// ./src/meta/doc.md
|
||||||
|
|
||||||
|
/*
|
||||||
#![crate_name = "doc"]
|
#![crate_name = "doc"]
|
||||||
|
|
||||||
/// A human being is represented here
|
/// A human being is represented here
|
||||||
|
@ -47,8 +47,9 @@ fn part0() {
|
||||||
// Example from the futures-rs library
|
// Example from the futures-rs library
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
pub use self::async_await::*;
|
pub use self::async_await::*;
|
||||||
|
*/
|
||||||
|
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
part0();
|
// part0();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// ./src/mod/use.md
|
// ./src/mod/use.md
|
||||||
|
|
||||||
|
/*
|
||||||
use crate::deeply::nested::{
|
use crate::deeply::nested::{
|
||||||
my_first_function,
|
my_first_function,
|
||||||
my_second_function,
|
my_second_function,
|
||||||
|
@ -44,10 +44,10 @@ fn part1() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function();
|
function();
|
||||||
}
|
}*/
|
||||||
|
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
part0();
|
// part0();
|
||||||
part1();
|
// part1();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,10 +10,10 @@ fn print_refs<'a, 'b>(x: &'a i32, y: &'b i32) {
|
||||||
|
|
||||||
// A function which takes no arguments, but has a lifetime parameter `'a`.
|
// A function which takes no arguments, but has a lifetime parameter `'a`.
|
||||||
fn failed_borrow<'a>() {
|
fn failed_borrow<'a>() {
|
||||||
let _x = 12;
|
// let _x = 12;
|
||||||
|
|
||||||
// ERROR: `_x` does not live long enough
|
// ERROR: `_x` does not live long enough
|
||||||
let y: &'a i32 = &_x;
|
// let y: &'a i32 = &_x;
|
||||||
// Attempting to use the lifetime `'a` as an explicit type annotation
|
// Attempting to use the lifetime `'a` as an explicit type annotation
|
||||||
// inside the function will fail because the lifetime of `&_x` is shorter
|
// inside the function will fail because the lifetime of `&_x` is shorter
|
||||||
// than that of `y`. A short lifetime cannot be coerced into a longer one.
|
// than that of `y`. A short lifetime cannot be coerced into a longer one.
|
||||||
|
|
|
@ -14,7 +14,7 @@ fn part0() {
|
||||||
|
|
||||||
// oops, &i only has the lifetime defined by the scope of
|
// oops, &i only has the lifetime defined by the scope of
|
||||||
// part0(), so it's not 'static:
|
// part0(), so it's not 'static:
|
||||||
print_it(&i);
|
// print_it(&i);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// ./src/std/arc.md
|
// ./src/std/arc.md
|
||||||
|
|
||||||
|
/*
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::thread;
|
use std::thread;
|
||||||
|
@ -24,8 +24,9 @@ fn part0() {
|
||||||
// Make sure all Arc instances are printed from spawned threads.
|
// Make sure all Arc instances are printed from spawned threads.
|
||||||
thread::sleep(Duration::from_secs(1));
|
thread::sleep(Duration::from_secs(1));
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
part0();
|
// part0();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// ./src/std/hash/alt_key_types.md
|
// ./src/std/hash/alt_key_types.md
|
||||||
|
|
||||||
|
/*
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
// Eq requires that you derive PartialEq on the type.
|
// Eq requires that you derive PartialEq on the type.
|
||||||
|
@ -56,9 +56,9 @@ fn part0(){
|
||||||
try_logon(&accounts, "j.everyman", "psasword123");
|
try_logon(&accounts, "j.everyman", "psasword123");
|
||||||
|
|
||||||
try_logon(&accounts, "j.everyman", "password123");
|
try_logon(&accounts, "j.everyman", "password123");
|
||||||
}
|
}*/
|
||||||
|
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
part0();
|
// part0();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// ./src/std_misc/threads.md
|
// ./src/std_misc/threads.md
|
||||||
|
|
||||||
|
/*
|
||||||
use std::thread;
|
use std::thread;
|
||||||
|
|
||||||
const NTHREADS: u32 = 10;
|
const NTHREADS: u32 = 10;
|
||||||
|
@ -21,9 +21,9 @@ fn part0() {
|
||||||
// Wait for the thread to finish. Returns a result.
|
// Wait for the thread to finish. Returns a result.
|
||||||
let _ = child.join();
|
let _ = child.join();
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
|
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
part0();
|
// part0();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ fn parse_csv_document<R: std::io::BufRead>(src: R) -> std::io::Result<Vec<Vec<St
|
||||||
.collect() // Collect all lines into a Vec<Vec<String>>
|
.collect() // Collect all lines into a Vec<Vec<String>>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
fn parse_csv_document(src: impl std::io::BufRead) -> std::io::Result<Vec<Vec<String>>> {
|
fn parse_csv_document(src: impl std::io::BufRead) -> std::io::Result<Vec<Vec<String>>> {
|
||||||
src.lines()
|
src.lines()
|
||||||
.map(|line| {
|
.map(|line| {
|
||||||
|
@ -27,7 +28,7 @@ fn parse_csv_document(src: impl std::io::BufRead) -> std::io::Result<Vec<Vec<Str
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.collect() // Collect all lines into a Vec<Vec<String>>
|
.collect() // Collect all lines into a Vec<Vec<String>>
|
||||||
}
|
} */
|
||||||
|
|
||||||
use std::iter;
|
use std::iter;
|
||||||
use std::vec::IntoIter;
|
use std::vec::IntoIter;
|
||||||
|
|
|
@ -17,7 +17,7 @@ fn part0() {
|
||||||
let another_binding;
|
let another_binding;
|
||||||
|
|
||||||
// Error! Use of uninitialized binding
|
// Error! Use of uninitialized binding
|
||||||
println!("another binding: {}", another_binding);
|
// println!("another binding: {}", another_binding);
|
||||||
// FIXME ^ Comment out this line
|
// FIXME ^ Comment out this line
|
||||||
|
|
||||||
another_binding = 1;
|
another_binding = 1;
|
||||||
|
|
|
@ -13,7 +13,7 @@ fn part0() {
|
||||||
println!("After mutation: {}", mutable_binding);
|
println!("After mutation: {}", mutable_binding);
|
||||||
|
|
||||||
// Error!
|
// Error!
|
||||||
_immutable_binding += 1;
|
// _immutable_binding += 1;
|
||||||
// FIXME ^ Comment out this line
|
// FIXME ^ Comment out this line
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue