小编Cra*_* D.的帖子

Trait 方法返回具有不同类型和/或生命周期参数的“Self”类型

Rust 编译器不允许Self在特征方法的返回类型中指定新类型参数。也就是说,特征方法可以返回Self,但不能Self<T>。我感兴趣的是完成以下任务的正确方法是什么;或者如果这根本不可能,那么为什么会这样。

假设我们有两个结构体,如下所示:

pub struct SomeStruct<T> {
    id: usize,
    description: String,
    extra_data: T,
}

pub struct OtherStruct<T> {
    permit_needed: bool,
    registration_number: usize,
    extra_data: T,
}
Run Code Online (Sandbox Code Playgroud)

这两个结构体都有一个extra_data类型为 的字段T,其中T是泛型类型参数。我们可以在这两个结构上实现诸如get_extra_data(),更有趣的是 ,之类的方法:transform()

impl<T> SomeStruct<T> {
    pub fn get_extra_data(&self) -> &T {
        &self.extra_data
    }

    pub fn transform<S>(&self, data: S) -> SomeStruct<S> {
        SomeStruct {
            id: self.id,
            description: self.description.clone(),
            extra_data: data,
        }
    }
}

impl<T> OtherStruct<T> {
    pub fn get_extra_data(&self) -> …
Run Code Online (Sandbox Code Playgroud)

rust

5
推荐指数
0
解决办法
2362
查看次数

标签 统计

rust ×1