[rust/en] Function pointer type added (#4107)

* Function pointer type added

* String slice details added.

* String slice view explanation.
This commit is contained in:
Maximilian Sonnenburg 2022-01-03 18:16:59 +01:00 committed by GitHub
parent 3cbcd37434
commit e0f5bcf36a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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 doesnt
// 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 //
/////////////////////////