]>
Commit | Line | Data |
---|---|---|
60c5eb7d XL |
1 | An associated function for a trait was defined to be a method (i.e., to take a |
2 | `self` parameter), but an implementation of the trait declared the same function | |
3 | to be static. | |
4 | ||
dfeec247 | 5 | Erroneous code example: |
60c5eb7d XL |
6 | |
7 | ```compile_fail,E0186 | |
8 | trait Foo { | |
9 | fn foo(&self); | |
10 | } | |
11 | ||
12 | struct Bar; | |
13 | ||
14 | impl Foo for Bar { | |
15 | // error, method `foo` has a `&self` declaration in the trait, but not in | |
16 | // the impl | |
17 | fn foo() {} | |
18 | } | |
19 | ``` | |
dfeec247 XL |
20 | |
21 | When a type implements a trait's associated function, it has to use the same | |
22 | signature. So in this case, since `Foo::foo` takes `self` as argument and | |
23 | does not return anything, its implementation on `Bar` should be the same: | |
24 | ||
25 | ``` | |
26 | trait Foo { | |
27 | fn foo(&self); | |
28 | } | |
29 | ||
30 | struct Bar; | |
31 | ||
32 | impl Foo for Bar { | |
33 | fn foo(&self) {} // ok! | |
34 | } | |
35 | ``` |