summaryrefslogtreecommitdiffhomepage
path: root/rust.html.markdown
diff options
context:
space:
mode:
authorMaximilian Sonnenburg <25778959+LamdaLamdaLamda@users.noreply.github.com>2022-01-03 18:16:59 +0100
committerGitHub <noreply@github.com>2022-01-04 01:16:59 +0800
commite0f5bcf36a4eb27c72473ce5dbab960792e364cc (patch)
tree5b1b7c1bd924073c29b63fa7a41b95596588a8c6 /rust.html.markdown
parent3cbcd374341bc9b952e4ee0c3feffe77f8deb69c (diff)
[rust/en] Function pointer type added (#4107)
* Function pointer type added * String slice details added. * String slice view explanation.
Diffstat (limited to 'rust.html.markdown')
-rw-r--r--rust.html.markdown24
1 files changed, 22 insertions, 2 deletions
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<u8>` 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<T>`.
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 //
/////////////////////////