This commit is contained in:
Aleksey Kladov 2020-10-07 13:03:13 +02:00
parent 6976494781
commit 1688e481b3

View file

@ -113,6 +113,13 @@ Avoid preconditions that span across function boundaries:
```rust ```rust
// Good // Good
fn main() {
let s: &str = ...;
if let Some(contents) = string_literal_contents(s) {
}
}
fn string_literal_contents(s: &str) -> Option<&str> { fn string_literal_contents(s: &str) -> Option<&str> {
if s.starts_with('"') && s.ends_with('"') { if s.starts_with('"') && s.ends_with('"') {
Some(&s[1..s.len() - 1]) Some(&s[1..s.len() - 1])
@ -121,24 +128,17 @@ fn string_literal_contents(s: &str) -> Option<&str> {
} }
} }
fn foo() {
let s: &str = ...;
if let Some(contents) = string_literal_contents(s) {
}
}
// Not as good // Not as good
fn is_string_literal(s: &str) -> bool { fn main() {
s.starts_with('"') && s.ends_with('"')
}
fn foo() {
let s: &str = ...; let s: &str = ...;
if is_string_literal(s) { if is_string_literal(s) {
let contents = &s[1..s.len() - 1]; let contents = &s[1..s.len() - 1];
} }
} }
fn is_string_literal(s: &str) -> bool {
s.starts_with('"') && s.ends_with('"')
}
``` ```
In the "Not as good" version, the precondition that `1` is a valid char boundary is checked in `is_string_literal` and used in `foo`. In the "Not as good" version, the precondition that `1` is a valid char boundary is checked in `is_string_literal` and used in `foo`.