Как реализовать коммутативное (скалярное) умножение со встроенным типом типа `f64`?

Я хотел бы реализовать коммутативную скалярную операцию умножения f64 с помощью оператора *. Реализация признака Mul для моего типа дает мне правильное умножение, например.

struct Foo(f64);
impl Mul<f64> for Foo {
 type Output = Foo;
 fn mul(self, _rhs: f64) -> Foo {
 // implementation
 }
}
let a = Foo(1.23);
a * 3.45; // works
3.45 * a; // error: the trait bound `{float}: std::ops::Mul<foo>` is not satisfied [E0277]
</foo></f64>

Для не встроен скалярного типа, можно реализовать и тот же признак наоборот на скаляре, т.е. реализующего Mul на моем скалярном типе.

Как получить левую реализацию для встроенного типа, например f64?

1 ответ

Вы можете просто отменить свою реализацию, заменив f64 на Foo

impl std::ops::Mul<foo> for f64 {
 type Output = Foo;
 fn mul(self, rhs: Foo) -> Foo {
 rhs * self
 }
}
</foo>

Попробуйте на игровой площадке

licensed under cc by-sa 3.0 with attribution.