X-Git-Url: https://git.ralfj.de/rust-101.git/blobdiff_plain/4f61be32dd480f23a7fef05ee66c42ae27c980c6..126f7bfe68883e6465d42c529b00d797b2f8478a:/src/part07.rs?ds=sidebyside diff --git a/src/part07.rs b/src/part07.rs index 6544995..151a3d6 100644 --- a/src/part07.rs +++ b/src/part07.rs @@ -27,7 +27,7 @@ pub fn vec_min(v: &Vec) -> Option<&T> { //@ Notice that the return type `Option<&T>` is technically (leaving the borrowing story aside) a //@ pointer to a `T`, that could optionally be invalid. In other words, it's just like a pointer in //@ C(++) or Java that can be `NULL`! However, thanks to `Option` being an `enum`, we cannot forget -//@ to check the pointer for validity, avoiding the safety issues of C(++).
+//@ to check the pointer for validity, avoiding the safety issues of C(++).
//@ Also, if you are worried about wasting space, notice that Rust knows that `&T` can never be //@ `NULL`, and hence optimizes `Option<&T>` to be no larger than `&T`. The `None` case is represented //@ as `NULL`. This is another great example of a zero-cost abstraction: `Option<&T>` is exactly like @@ -35,7 +35,7 @@ pub fn vec_min(v: &Vec) -> Option<&T> { // **Exercise 07.1**: For our `vec_min` to be usable with `BigInt`, you will have to provide an implementation of // `Minimum`. You should be able to pretty much copy the code you wrote for exercise 06.1. You should *not* -// make any copies! +// make any copies of `BigInt`! impl Minimum for BigInt { fn min<'a>(&'a self, other: &'a Self) -> &'a Self { unimplemented!() @@ -147,4 +147,4 @@ fn test_vec_min() { // of course, need a `Display` bound on `T`.) Then you should be able to use them with `println!` just like you do // with numbers, and get rid of the inherent functions to print `SomethingOrNothing` and `SomethingOrNothing`. -//@ [index](main.html) | [previous](part06.html) | [next](main.html) +//@ [index](main.html) | [previous](part06.html) | [next](part08.html)