For example, if you had this code:
fn foo(x: i32, y: f32) -> f32 {
x * y
}
You would get this error:
error[E0277]: cannot multiply `f32` to `i32`
--> src/lib.rs:2:7
|
2 | x * y
| ^ no implementation for `i32 * f32`
|
= help: the trait `Mul<f32>` is not implemented for `i32`
However, that's not usually how people describe multiplication. People
usually describe multiplication like how the division error words it:
error[E0277]: cannot divide `i32` by `f32`
--> src/lib.rs:2:7
|
2 | x / y
| ^ no implementation for `i32 / f32`
|
= help: the trait `Div<f32>` is not implemented for `i32`
So that's what this change does. It changes this:
error[E0277]: cannot multiply `f32` to `i32`
--> src/lib.rs:2:7
|
2 | x * y
| ^ no implementation for `i32 * f32`
|
= help: the trait `Mul<f32>` is not implemented for `i32`
To this:
error[E0277]: cannot multiply `i32` by `f32`
--> src/lib.rs:2:7
|
2 | x * y
| ^ no implementation for `i32 * f32`
|
= help: the trait `Mul<f32>` is not implemented for `i32`
15 lines
270 B
Rust
15 lines
270 B
Rust
struct Thing {
|
|
x: isize
|
|
}
|
|
|
|
impl Thing {
|
|
fn mul(&self, c: &isize) -> Thing {
|
|
Thing {x: self.x * *c}
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
let u = Thing {x: 2};
|
|
let _v = u.mul(&3); // This is ok
|
|
let w = u * 3; //~ ERROR cannot multiply `Thing` by `{integer}`
|
|
}
|