我一直在尝试查找有关 Rust 如何在涉及模块边界的情况下解决特征包实现的文档,但没有找到与之直接相关的内容。
让我们考虑一个包含两个相似但略有不同的代码片段的示例:
第一个代码片段编译得很好,但会遭受无限的运行时递归。ClonableIterator发生这种情况是因为for 的全面实现T: Iterator+Clone与 which is 相匹配Box<dyn ClonableIterator<'a>>,这要归功于我们手动实现Clone和nowBox的全面实现。IteratorIterator+Clone
//the trait itself, with the indirection to call box_clone on the base type
trait ClonableIterator<'a>: Iterator<Item = &'a u32> + 'a {
fn box_clone(&self) -> Box<dyn ClonableIterator<'a>>;
}
//The blanket implementation of the trait for all clonable iterators
impl<'a, T: Iterator<Item = &'a u32> + Clone + 'a> ClonableIterator<'a> for T {
fn box_clone(&self) -> Box<dyn ClonableIterator<'a>> …Run Code Online (Sandbox Code Playgroud)