走进 Rust;高级 trait

Rust About 969 words

关联类型 associated types

将类型占位符与trait相关联的方式,这样trait的方法签名中就可以使用这些占位符类型。

trait的实现者会针对特定的实现在这个占位符类型指定相应的具体类型。

标准库中的 Iterator

Item是一个占位符类型。

next方法返回的Option<Self::Item>类型。

Iterator的实现者会指定Item的具体类型

pub trait Iterator {
    type Item;

    fn next(&mut self) -> Option<Self::Item>;
}

标准库中的 Iterator 实现

Chars实现了Iterator,指定了Item占位符类型是char

#[stable(feature = "rust1", since = "1.0.0")]
impl<'a> Iterator for Chars<'a> {
    type Item = char;

    #[inline]
    fn next(&mut self) -> Option<char> {
        // SAFETY: `str` invariant says `self.iter` is a valid UTF-8 string and
        // the resulting `ch` is a valid Unicode Scalar Value.
        unsafe { next_code_point(&mut self.iter).map(|ch| char::from_u32_unchecked(ch)) }
    }
}

自定义实现 Iterator

Counter是自定义的结构体,实现Iterator,指定Itemu32类型。

impl Iterator for Counter {
    type Item = u32;

    fn next(&mut self) -> Option<Self::Item> {
        // --snip--
    }
}
Views: 672 · Posted: 2023-04-11

————        END        ————

Give me a Star, Thanks:)

https://github.com/fendoudebb/LiteNote

扫描下方二维码关注公众号和小程序↓↓↓

扫描下方二维码关注公众号和小程序↓↓↓


Today On History
Browsing Refresh