Rust如何知道需要或提供哪些特征方法?

时间:2017-06-20 02:04:59

标签: rust

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如何知道需要或提供哪种方法?

2 个答案:

答案 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的默认函数。