mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2025-08-13 18:24:39 +02:00
Merge pull request #3618 from Emerentius/master
[Rust/en] minor fixes to string slices and borrow system
This commit is contained in:
@@ -92,10 +92,8 @@ fn main() {
|
|||||||
let s: String = "hello world".to_string();
|
let s: String = "hello world".to_string();
|
||||||
|
|
||||||
// A string slice – an immutable view into another string
|
// A string slice – an immutable view into another string
|
||||||
// This is basically an immutable pair of pointers to a string – it doesn’t
|
// The string buffer can be statically allocated like in a string literal
|
||||||
// actually contain the contents of a string, just a pointer to
|
// or contained in another object (in this case, `s`)
|
||||||
// the begin and a pointer to the end of a string buffer,
|
|
||||||
// statically allocated or contained in another object (in this case, `s`)
|
|
||||||
let s_slice: &str = &s;
|
let s_slice: &str = &s;
|
||||||
|
|
||||||
println!("{} {}", s, s_slice); // hello world hello world
|
println!("{} {}", s, s_slice); // hello world hello world
|
||||||
@@ -290,7 +288,7 @@ fn main() {
|
|||||||
// Reference – an immutable pointer that refers to other data
|
// Reference – an immutable pointer that refers to other data
|
||||||
// When a reference is taken to a value, we say that the value has been ‘borrowed’.
|
// When a reference is taken to a value, we say that the value has been ‘borrowed’.
|
||||||
// While a value is borrowed immutably, it cannot be mutated or moved.
|
// While a value is borrowed immutably, it cannot be mutated or moved.
|
||||||
// A borrow lasts until the end of the scope it was created in.
|
// A borrow is active until the last use of the borrowing variable.
|
||||||
let mut var = 4;
|
let mut var = 4;
|
||||||
var = 3;
|
var = 3;
|
||||||
let ref_var: &i32 = &var;
|
let ref_var: &i32 = &var;
|
||||||
@@ -299,6 +297,8 @@ fn main() {
|
|||||||
println!("{}", *ref_var);
|
println!("{}", *ref_var);
|
||||||
// var = 5; // this would not compile because `var` is borrowed
|
// var = 5; // this would not compile because `var` is borrowed
|
||||||
// *ref_var = 6; // this would not either, because `ref_var` is an immutable reference
|
// *ref_var = 6; // this would not either, because `ref_var` is an immutable reference
|
||||||
|
ref_var; // no-op, but counts as a use and keeps the borrow active
|
||||||
|
var = 2; // ref_var is no longer used after the line above, so the borrow has ended
|
||||||
|
|
||||||
// Mutable reference
|
// Mutable reference
|
||||||
// While a value is mutably borrowed, it cannot be accessed at all.
|
// While a value is mutably borrowed, it cannot be accessed at all.
|
||||||
@@ -309,6 +309,7 @@ fn main() {
|
|||||||
println!("{}", *ref_var2); // 6 , // var2 would not compile.
|
println!("{}", *ref_var2); // 6 , // var2 would not compile.
|
||||||
// ref_var2 is of type &mut i32, so stores a reference to an i32, not the value.
|
// ref_var2 is of type &mut i32, so stores a reference to an i32, not the value.
|
||||||
// var2 = 2; // this would not compile because `var2` is borrowed.
|
// var2 = 2; // this would not compile because `var2` is borrowed.
|
||||||
|
ref_var2; // no-op, but counts as a use and keeps the borrow active until here
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user