我正在构建一个实现字符串连接的库; 也就是说,打印由分隔符分隔的容器的所有元素.我的基本设计如下:
use std::fmt;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Join<Container, Sep> {
container: Container,
sep: Sep,
}
impl<Container, Sep> fmt::Display for Join<Container, Sep>
where
for<'a> &'a Container: IntoIterator,
for<'a> <&'a Container as IntoIterator>::Item: fmt::Display,
Sep: fmt::Display,
{
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let mut iter = self.container.into_iter();
match iter.next() {
None => Ok(()),
Some(first) => {
first.fmt(f)?;
iter.try_for_each(move |element| {
self.sep.fmt(f)?;
element.fmt(f)
})
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这种特质实施无需投诉即可编译.注意绑定&'a C: IntoIterator.许多容器实现IntoIterator对自身的引用,以允许迭代对包含项的引用(例如,在此处Vec …