从std::iter::Iterator
文档中,我发现只需要next
方法:
所需方法
fn next(&mut self) -> Option<Self::Item>
但是在删除评论后,从source code开始:
pub trait Iterator {
/// The type of the elements being iterated over.
#[stable(feature = "rust1", since = "1.0.0")]
type Item;
......
#[stable(feature = "rust1", since = "1.0.0")]
fn next(&mut self) -> Option<Self::Item>;
......
#[inline]
#[stable(feature = "rust1", since = "1.0.0")]
fn size_hint(&self) -> (usize, Option<usize>) { (0, None) }
......
}
我可以看到,除#[inline]
属性外,必需方法和提供的方法之间没有区别。 Rust如何知道需要或提供哪种方法?
答案 0 :(得分:7)
除
#[inline]
属性外,必需和提供的方法之间没有区别
存在巨大差异,你只是忽略了(缺乏)格式化。请允许我为您重新格式化:
fn next(&mut self) -> Option<Self::Item>;
fn size_hint(&self) -> (usize, Option<usize>) { // Starting with `{`
(0, None) //
} // Ending with `}`
所有默认方法都有一个函数体。所需的方法没有。
我强烈建议您重读The Rust Programming Language,特别是the chapter about traits and default implementations。这个资源是一个更好的方式来开始这样的介绍性主题,而不是阅读标准库的任意片段。
答案 1 :(得分:6)
这很简单:提供的(可选)函数具有默认实现,而不是必需的。
请注意,如果您愿意,可以重新实现所提供的函数,因此它的性能优于特定struct / enum的默认函数。