如何使用像`f64`这样的内置类型实现可交换(标量)乘法?

时间:2016-08-08 13:04:02

标签: rust

我想使用f64运算符实现可交换标量*乘法运算。为我的类型实现Mul<f64>特征给我一个右侧乘法,如。

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]

对于非内置标量类型,我可以在标量上实现相同的特性,即在我的标量类型上实现Mul<Foo>

如何获得像f64这样的内置类型的左侧实现?

1 个答案:

答案 0 :(得分:9)

您只需使用f64

交换Foo即可撤消您的实施
impl std::ops::Mul<Foo> for f64 {
    type Output = Foo;

    fn mul(self, rhs: Foo) -> Foo {
        rhs * self
    }
}

Try it out in the Playground