典型的用例是
fn process_items(items: impl IntoIterator<Item=MyComplexType>) {...}我想知道这能不能缩短到
fn process_items(items: impl ItemsIter) {...}然而,
type ItemsIter = IntoIterator<Item=MyComplexType>不工作和辅助特性
trait ItemsIter: IntoIterator<Item=MyComplexType> {}需要一个全面的实现。有没有更好的方法?
发布于 2021-10-04 14:18:35
除了其他答案之外,请注意,创建"trait alias“的能力确实存在,但不稳定。如果你每晚都在使用不稳定的特性,你可以这样做。
#![feature(trait_alias)]
pub struct MyComplexType;
trait MyComplexIterator = IntoIterator<Item = MyComplexType>;发布于 2021-10-04 09:21:32
您可以为MyComplexType创建一个类型别名,并创建一个where子句来将绑定到函数参数列表之外的特征移出,例如
type MyAlias = MyComplexType;
fn process_items<I>(items: I)
where
I: IntoIterator<Item = MyAlias>
{...}如果您经常需要此特征绑定,您还可以创建一个具有所需特征绑定的自定义特征,并为其提供一个全面的实现:
trait MyIterator: IntoIterator<Item = MyComplexType> {}
impl<T: IntoIterator<Item = MyComplexType>> MyIterator for T {}
fn process_items(items: impl MyIterator) {...}(您在问题中提到了这一点;我不认为这种方法有任何问题。)
https://stackoverflow.com/questions/69433551
复制相似问题