Auto merge of #29846 - JanLikar:#29823, r=steveklabnik
Fix #29823 by further explaining `&str` and pointing out the difference between `&str` and `&'static str`.
This commit is contained in:
commit
68f8122309
@ -12,17 +12,18 @@ encoding of UTF-8 sequences. Additionally, unlike some systems languages,
|
|||||||
strings are not null-terminated and can contain null bytes.
|
strings are not null-terminated and can contain null bytes.
|
||||||
|
|
||||||
Rust has two main types of strings: `&str` and `String`. Let’s talk about
|
Rust has two main types of strings: `&str` and `String`. Let’s talk about
|
||||||
`&str` first. These are called ‘string slices’. String literals are of the type
|
`&str` first. These are called ‘string slices’. A string slice has a fixed
|
||||||
`&'static str`:
|
size, and cannot be mutated. It is a reference to a sequence of UTF-8 bytes.
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
let greeting = "Hello there."; // greeting: &'static str
|
let greeting = "Hello there."; // greeting: &'static str
|
||||||
```
|
```
|
||||||
|
|
||||||
This string is statically allocated, meaning that it’s saved inside our
|
`"Hello there."` is a string literal and its type is `&'static str`. A string
|
||||||
compiled program, and exists for the entire duration it runs. The `greeting`
|
literal is a string slice that is statically allocated, meaning that it’s saved
|
||||||
binding is a reference to this statically allocated string. String slices
|
inside our compiled program, and exists for the entire duration it runs. The
|
||||||
have a fixed size, and cannot be mutated.
|
`greeting` binding is a reference to this statically allocated string. Any
|
||||||
|
function expecting a string slice will also accept a string literal.
|
||||||
|
|
||||||
String literals can span multiple lines. There are two forms. The first will
|
String literals can span multiple lines. There are two forms. The first will
|
||||||
include the newline and the leading spaces:
|
include the newline and the leading spaces:
|
||||||
@ -34,7 +35,7 @@ let s = "foo
|
|||||||
assert_eq!("foo\n bar", s);
|
assert_eq!("foo\n bar", s);
|
||||||
```
|
```
|
||||||
|
|
||||||
The second, with a `\`, does not trim the spaces:
|
The second, with a `\`, trims the spaces and the newline:
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
let s = "foo\
|
let s = "foo\
|
||||||
|
Loading…
Reference in New Issue
Block a user