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 ×1