相关疑难解决方法(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
查看次数

为什么使用我的类型作为外部类型合法的参数来实现外部特征?

我正在修改一些代码以依赖于 rand 0.5 版。起初,我担心如何使用 生成我自己类型的随机值Standard,但我发现这是合法的:

impl ::rand::distributions::Distribution<MyType> for ::rand::distributions::Standard {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

为什么是合法的?我认为为外部类型实现外部特征是非法的

traits orphan rust

4
推荐指数
1
解决办法
162
查看次数

有没有办法在不修改实际库源代码的情况下对库中的结构或枚举使用#[derive]?

我正在使用一个使用serde-json的Rust程序,我非常喜欢#[derive(Serialize, Deserialize)]它为自定义结构和枚举使用的宏.使用我自己的类型,宏可以正常工作.但是,我希望能够从我正在使用的其他库中调用类型的宏.

我会自己实现这些类型的特性SerializeDeserialize特征,但是代码Deserialize特别复杂,为我在结构中使用的每个库类型写入都会很痛苦.

rust

3
推荐指数
1
解决办法
281
查看次数

标签 统计

rust ×3

traits ×2

orphan ×1