| An item usage is ambiguous. |
| |
| Erroneous code example: |
| |
| ```compile_fail,edition2018,E0659 |
| pub mod moon { |
| pub fn foo() {} |
| } |
| |
| pub mod earth { |
| pub fn foo() {} |
| } |
| |
| mod collider { |
| pub use crate::moon::*; |
| pub use crate::earth::*; |
| } |
| |
| fn main() { |
| crate::collider::foo(); // ERROR: `foo` is ambiguous |
| } |
| ``` |
| |
| This error generally appears when two items with the same name are imported into |
| a module. Here, the `foo` functions are imported and reexported from the |
| `collider` module and therefore, when we're using `collider::foo()`, both |
| functions collide. |
| |
| To solve this error, the best solution is generally to keep the path before the |
| item when using it. Example: |
| |
| ```edition2018 |
| pub mod moon { |
| pub fn foo() {} |
| } |
| |
| pub mod earth { |
| pub fn foo() {} |
| } |
| |
| mod collider { |
| pub use crate::moon; |
| pub use crate::earth; |
| } |
| |
| fn main() { |
| crate::collider::moon::foo(); // ok! |
| crate::collider::earth::foo(); // ok! |
| } |
| ``` |