以下代码使用具有泛型类型的结构.虽然它的实现仅对给定的特征边界有效,但可以使用或不使用相同的边界来定义结构.struct的字段是私有的,因此无论如何其他代码都无法创建实例.
trait Trait {
fn foo(&self);
}
struct Object<T: Trait> {
value: T,
}
impl<T: Trait> Object<T> {
fn bar(object: Object<T>) {
object.value.foo();
}
}
Run Code Online (Sandbox Code Playgroud)
是否应该忽略对结构有约束力的特性以符合DRY原则,还是应该给予澄清依赖性?或者是否存在一种解决方案应优先于另一种解决方案?
我正在使用一些通用结构,如下所示:
pub struct Example<A, B, C, D, E, F> {
inner: OtherExample<A, B, C, D, E, F>
...
}
Run Code Online (Sandbox Code Playgroud)
在该结构的整个实现方法中,我必须不断引用这一巨大的类型集,如下所示:
impl<A, B, C, D, E, F> Example<A, B, C, D, E, F> {
pub fn get_inner(&self) -> &OtherExample<A, B, C, D, E, F> {
&self.inner
}
...
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种方法可以缩短所有这些通用类型的符号。为了便于阅读,我不能像上面的示例中那样只使用单个字母,所以我真的想在结构中创建一个泛型类型别名,如下所示:
pub struct Example<AliasedGenerics = <A, B, C, D, E, F>> {
inner: OtherExample<AliasedGenerics>
...
}
impl<AliasedGenerics = <A, B, C, D, E, F>> Example<AliasedGenerics> {
pub fn get_inner(&self) -> &OtherExample<AliasedGenerics> { …Run Code Online (Sandbox Code Playgroud) rust ×2