此问题在此处已有答案:
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
那么这应该怎么做呢?有没有一个板条箱已经实现了这些呢?
1条答案
按热度按时间kcrjzv8t1#
你不能为一个原语实现穆尔。这是Rusts外来类型规则的一部分:对于crate中的一个实现,至少有一个实现的类型或trait必须已经在crate中定义。因为穆尔和原语都没有在你的代码中定义,所以你不能为它们创建一个实现。
如果您真的想这样做,您需要围绕f32创建一个 Package 器类型,并在其上实现穆尔和所有其他相关操作符。