Use simpler code example for E0631 long error.
This commit is contained in:
parent
7693bb9e1d
commit
26a1ba85b8
1 changed files with 12 additions and 14 deletions
|
@ -3,27 +3,25 @@ This error indicates a type mismatch in closure arguments.
|
|||
Erroneous code example:
|
||||
|
||||
```compile_fail,E0631
|
||||
fn test_strings(string_vec: Vec<String>) -> Vec<bool> {
|
||||
string_vec
|
||||
.iter()
|
||||
.map(|arg: &i32| arg.eq("Test String"))
|
||||
.collect()
|
||||
fn foo<F: Fn(i32)>(f: F) {
|
||||
}
|
||||
|
||||
fn main() {
|
||||
foo(|x: &str| {});
|
||||
}
|
||||
```
|
||||
|
||||
The closure passed to `map` expects a `&String` argument, since `some_vec`
|
||||
has the type `Vec<String>`.
|
||||
However, the closure argument is annotated as an `&i32`, which does not match
|
||||
the type of the iterable.
|
||||
The error occurs because `foo` accepts a closure that takes an `i32` argument,
|
||||
but in `main`, it is passed a closure with a `&str` argument.
|
||||
|
||||
This can be resolved by changing the type annotation or removing it entirely
|
||||
if it can be inferred.
|
||||
|
||||
```
|
||||
fn test_strings(string_vec: Vec<String>) -> Vec<bool> {
|
||||
string_vec
|
||||
.iter()
|
||||
.map(|arg| arg.eq("Test String"))
|
||||
.collect()
|
||||
fn foo<F: Fn(i32)>(f: F) {
|
||||
}
|
||||
|
||||
fn main() {
|
||||
foo(|x: i32| {});
|
||||
}
|
||||
```
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue