From e0f5bcf36a4eb27c72473ce5dbab960792e364cc Mon Sep 17 00:00:00 2001 From: Maximilian Sonnenburg <25778959+LamdaLamdaLamda@users.noreply.github.com> Date: Mon, 3 Jan 2022 18:16:59 +0100 Subject: [rust/en] Function pointer type added (#4107) * Function pointer type added * String slice details added. * String slice view explanation. --- rust.html.markdown | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'rust.html.markdown') diff --git a/rust.html.markdown b/rust.html.markdown index 9cb44d04..9e07e005 100644 --- a/rust.html.markdown +++ b/rust.html.markdown @@ -89,11 +89,16 @@ fn main() { println!("{} {}", f, x); // 1.3 hello world // A `String` – a heap-allocated string + // Stored as a `Vec` and always hold a valid UTF-8 sequence, + // which is not null terminated. let s: String = "hello world".to_string(); // A string slice – an immutable view into another string - // The string buffer can be statically allocated like in a string literal - // or contained in another object (in this case, `s`) + // This is basically an immutable pair of pointers to a string – it doesn’t + // actually contain the contents of a string, just a pointer to + // the begin and a pointer to the end of a string buffer, + // statically allocated or contained in another object (in this case, `s`). + // The string slice is like a view `&[u8]` into `Vec`. let s_slice: &str = &s; println!("{} {}", s, s_slice); // hello world hello world @@ -205,6 +210,21 @@ fn main() { let another_foo = Foo { bar: 1 }; println!("{:?}", another_foo.frobnicate()); // Some(1) + // Function pointer types // + + fn fibonacci(n: u32) -> u32 { + match n { + 0 => 1, + 1 => 1, + _ => fibonacci(n - 1) + fibonacci(n - 2), + } + } + + type FunctionPointer = fn(u32) -> u32; + + let fib : FunctionPointer = fibonacci; + println!("Fib: {}", fib(4)); + ///////////////////////// // 3. Pattern matching // ///////////////////////// -- cgit v1.2.3