3个不稳定版本
0.2.1 | 2021年12月22日 |
---|---|
0.2.0 | 2021年12月22日 |
0.1.0 | 2021年12月18日 |
在Rust模式中排名第2285
6KB
88 行
构建所有元组的递归特质(长度最多为32)。
首先,你需要为所有元组提供一个标记。这是通过
mark_tuples!(MyMarker)
然后定义一个你想要应用于长度最多为32的元组的特质
trait MyInductiveTrait {
type AccumulatedTupleType;
fn fn_to_build_accumulated_type_from_self(self) -> Self::AccumulatedTupleType;
}
然后定义一个一元组的特质(即归纳的起点)
impl<A> MyInductiveTrait for (A,) {
type AccumulatedTupleType = (MyStruct<A>,);
fn fn_to_build_accumulated_type_from_self(self) -> Self::AccumulatedTupleType {
let (a,) = self;
(MyStruct::new(a),)
}
}
最难的是归纳步骤,你可能需要很多特质界限
impl<TupleType, Head, PrevTupleType, PrevAccumulatedTuple> MyInductiveTrait for TupleType
where
TupleType: PreviousTuple<Head = Head, TailTuple = PrevTuple> + MyMarker,
// You need the `MyMarker` trait because otherwise the compiler complains about potential
// changes to the PreviousTuple implementation.
PrevTuple: MyInductiveTrait<AccumulatedTupleType = PrevAccumulatedTuple>,
PrevAccumulatedTuple: NestTuple,
(PrevAccumulatedTuple::Nested, MyStruct<Head>): UnnestTuple
{
...
}