X-Git-Url: https://git.ralfj.de/rust-101.git/blobdiff_plain/375923e203d323dadc639434ebc1f29530f4ac2a..63d67be4fd88cf041af103bd987a84397d5fe0f5:/src/part06.rs?ds=inline diff --git a/src/part06.rs b/src/part06.rs index 21fe644..4c7ee24 100644 --- a/src/part06.rs +++ b/src/part06.rs @@ -127,8 +127,8 @@ fn head(v: &Vec) -> Option<&T> { //@ have aliasing (of `first` and `v`) and mutation. But this time, the bug is hidden behind the //@ call to `head`. How does Rust solve this? If we translate the code above to Rust, it doesn't //@ compile, so clearly we are good - but how and why? -//@ (Notice that have to explicitly assert using //@ `unwrap` that `first` is not `None`, whereas -//@ the C++ code above would silently dereference a //@ `NULL`-pointer. But that's another point.) +//@ (Notice that we use `unwrap` to explicitly assert that `first` is not `None`, whereas +//@ the C++ code above would silently dereference a `NULL`-pointer. But that's another point.) fn rust_foo(mut v: Vec) -> i32 { let first: Option<&i32> = head(&v); /* v.push(42); */ @@ -162,7 +162,7 @@ fn rust_foo(mut v: Vec) -> i32 { //@ application code. Most of the time, we don't have to explicitly add lifetimes to function //@ types. This is thanks to *lifetime elision*, where Rust will automatically insert lifetimes we //@ did not specify, following some simple, well-documented -//@ [rules](https://doc.rust- lang.org/stable/book/lifetimes.html#lifetime-elision). +//@ [rules](https://doc.rust-lang.org/stable/book/lifetimes.html#lifetime-elision). //@ [index](main.html) | [previous](part05.html) | [raw source](workspace/src/part06.rs) | //@ [next](part07.html)