相关疑难解决方法(0)

我如何实现一个我不拥有的特性我没有的类型?

我想实现这个Shl特性Vec,代码如下.这会使事情变得vec << 4可能,这对于它来说是个不错的选择vec.push(4).

use std::ops::Shl;

impl<T> Shl<T> for Vec<T> {
    type Output = Vec<T>;

    fn shl(&self, elem: &T) -> Vec<T> {
        self.push(*elem);
        *self
    }
}

fn main() {
    let v = vec![1, 2, 3];
    v << 4;
}
Run Code Online (Sandbox Code Playgroud)

编译失败,出现以下错误:

无法提供扩展实现,其中特征和类型都未在此包中定义[E0117]

要么

type参数T必须用作某些本地类型的类型参数(例如MyStruct<T>); 只有当前包中定义的特征才能为类型参数实现[E0210]

据我了解,我必须修补stdlib,更具体地来说是collections::vec板条箱.有没有其他方法可以更改此代码以成功编译?

traits rust

25
推荐指数
3
解决办法
3230
查看次数

为类型别名元组添加 Impl (f64, f64)

我有一个自定义类型 Point

type Point = (f64, f64);
Run Code Online (Sandbox Code Playgroud)

我想将两个Points 加在一起,但出现此错误

error[E0368]: binary assignment operation `+=` cannot be applied to type `(f64, f64)`
   --> src/main.rs:119:21
    |
119 |                     force_map[&body.name] += force;
    |                     ---------------------^^^^^^^^^
    |                     |
    |                     cannot use `+=` on type `(f64, f64)`
Run Code Online (Sandbox Code Playgroud)

当我尝试实现 Add 时,出现以下错误:

39 | / impl Add for (f64, f64) {
40 | |     #[inline(always)]
41 | |     fn add(self, other: (f64, f64)) -> (f64, f64)  {
42 | |         // Probably it will be optimized …
Run Code Online (Sandbox Code Playgroud)

types rust

2
推荐指数
1
解决办法
4681
查看次数

标签 统计

rust ×2

traits ×1

types ×1