如何在Rust中的内建函数上实现trait?[duplicate]

k4ymrczo  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(114)

此问题在此处已有答案

How do I implement a trait I don't own for a type I don't own?(3个答案)
9天前关闭。
rust eclipse :

let int: i32 = 3;
let float: f32 = 3.3;
let res = int*float; // Invalid
let res = (int as f32)*float; // Valid

为了简化这一过程,我希望在*操作符上实现一个覆盖,考虑到Rust的错误消息,这似乎是可能的:

cannot multiply `{integer}` by `{float}`
the trait `Mul<{float}>` is not implemented for `{integer}`
the following other types implement trait `Mul<Rhs>`:

但是写impl Mul<i32> for f32显然也是不可能的:

only traits defined in the current crate can be implemented for primitive types
define and implement a trait or new type instead

那么这应该怎么做呢?有没有一个板条箱已经实现了这些呢?

kcrjzv8t

kcrjzv8t1#

你不能为一个原语实现穆尔。这是Rusts外来类型规则的一部分:对于crate中的一个实现,至少有一个实现的类型或trait必须已经在crate中定义。因为穆尔和原语都没有在你的代码中定义,所以你不能为它们创建一个实现。
如果您真的想这样做,您需要围绕f32创建一个 Package 器类型,并在其上实现穆尔和所有其他相关操作符。

相关问题