我想用*运算符实现一个交换标量f64乘法运算.为我的类型实现Mul<f64> trait会给我一个右侧乘法.

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)获得左侧实现?

推荐答案

你可以简单地反转你的实现,用Foo替换f64

impl std::ops::Mul<Foo> for f64 {
    type Output = Foo;

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

Try it out in the Playground

Rust相关问答推荐

什么时候铁 rust FFI边界上的panic 是未定义的行为?

如何使用盒装枚举进行模式匹配?

我应该将哪些文件放入我的GitHub存储库

使用Rust WASM读取文件

如何将生存期参数添加到框<>;具有dyn类型别名

是否可以在不直接重复的情况下为许多特定类型实现一个函数?

随机函数不返回随机值

如何限制 GtkColumnView 行数

面临意外的未对齐指针取消引用:地址必须是 0x8 的倍数,但为 0x__错误

当锁被释放时,将锁包装到作用域中是否会发生变化?

str 和 String 的 Rust 生命周期

在不安全的 Rust 中存储对 struct 内部数据的静态引用是否合法?

bcrypt 有长度限制吗?

在 Rust 中如何将值推送到枚举 struct 内的 vec?

如何在 Rust 中编写涉及异步的重试函数

将 (T, ()) 转换为 T 安全吗?

有没有办法在 Rust 中对 BigInt 进行正确的位移?

为什么 Rust 标准库同时为 Thing 和 &Thing 实现特征?

如何在宏中的多个参数上编写嵌套循环?

在 macro_rules 中转义 $ 美元符号