当前位置: 首页 > news >正文

保定网站建设方案维护厦门小鱼网

保定网站建设方案维护,厦门小鱼网,网站制作公司前景,js 网站校验自定义 Counter 结构体类型,并实现迭代器。其他语言的场景,读取数据库行数据时,使用的就是迭代器。我们使用for语言遍历数组,也是一种迭代。 结构体对象实现 Iterator trait,创建自定义的迭代器,只需要实现…

自定义 Counter 结构体类型,并实现迭代器。其他语言的场景,读取数据库行数据时,使用的就是迭代器。我们使用for语言遍历数组,也是一种迭代。

结构体对象实现 Iterator trait,创建自定义的迭代器,只需要实现一个next方法的定义。它会在每次调用时返回一个包裹在Some中的迭代器元素,并在迭代器结束时返回None

Item定义为关联类型,就像是给类型起了一个别名。

struct Counter {count: u32,
}impl Counter {fn new() -> Counter {Counter { count: 0 }}
}impl Iterator for Counter {type Item = u32;fn next(&mut self) -> Option<Self::Item> {self.count += 1;if self.count < 3 {return Some(self.count);}None}
}#[test]
fn calling_next_directly() {let mut count = Counter::new();assert_eq!(count.next(), Some(1));assert_eq!(count.next(), Some(2));assert_eq!(count.next(), None);
}

这个迭代器并没有特别的地方,某种意义上它就是实现了一个接口,外部可以将这个对象当做接口来看待,最终体现在无脑适用迭代器提供的模式方法。

例子中的new方法称为关联函数associated function,将其命名为函数而不是方法,是因为它不会作用域某个具体的结构体实例,方法的参数声明中也不接受self,但它依然声明在impl块中。

new类似于构造函数,用来实例化一个新的结构体类型。通过类型名后面追加::来调用关联函数。单元测试的例子calling_next_directly声明了Counter实例并手动调用next方法。

适配器

实现了迭代器,如果只是为了手动调用next方法,那没啥意义。关键是依赖RUST提供的各种模式方法来链式处理迭代器。

迭代器抽象封装了很多处理模式,也就是迭代器适配器iterator adaptor方法,用来将现有的迭代器转换为其它不同类型的迭代器,通过链式地调用多个迭代适配器来完成一些复杂的操作。

下面的单元测试通过迭代器构造了一个[(1, 2)]元组。zip方法会在两个迭代器中任意一个返回None是结束迭代,skip跳过了第一个迭代,collect返回一个配对后值的集和。

#[test]
fn using_other_iterator_trait_methods() {let s: Vec<(u32, u32)> = Counter::new().zip(Counter::new().skip(1)).collect();println!("{:?}", s)
}

RUST正是有通过这个适配器,给我们抽象出了很多处理模式,我们通过简单的链式调用就可以实现很多复杂的能力。下面的方法介绍,也可以快速浏览官方查看。

collect方法

将一个迭代器转换为集合,只不过collect推断不出我们最终想要的类型,需要我们明确指定 collect返回值的类型。上个例子中的Vec<(u32, u32)>必须明确的指定类型,否则编译器会报错。

collect文档中还提供了另一种指定类型的方式:“turbofish::<>”,调整之后的代码会变成下面这个样子,结合编译器给出的类型提示,理解迭代器链路上上对象声明。

#[test]
fn using_other_iterator_trait_methods() {let s = Counter::new().zip(Counter::new().skip(1)).collect::<Vec<(u32, u32)>>();println!("{:?}", s)
}

在这里插入图片描述

collect返回集合的基础上还可以继续迭代,继续生成新的集合。下面的代码示例,我们基于第一次collect生成的元素[(1, 2)],重新生成一个新的集合[(2, 4)]

#[test]
fn using_other_iterator_trait_methods() {let s: Vec<(u32, u32)> = Counter::new().zip(Counter::new().skip(1)).collect::<Vec<(u32, u32)>>().iter().map(|x| (x.0 * 2, x.1 * 2)).collect();println!("{:?}", s)
}

文章转载自:
http://wanjiapropulsor.bqyb.cn
http://wanjiapolygonize.bqyb.cn
http://wanjiadimensionality.bqyb.cn
http://wanjiaacetylene.bqyb.cn
http://wanjiamercuric.bqyb.cn
http://wanjiaoctavo.bqyb.cn
http://wanjiaarcature.bqyb.cn
http://wanjiabroiler.bqyb.cn
http://wanjiacutline.bqyb.cn
http://wanjiacohabit.bqyb.cn
http://wanjiawep.bqyb.cn
http://wanjiajackass.bqyb.cn
http://wanjiapalmoil.bqyb.cn
http://wanjiarenminbi.bqyb.cn
http://wanjiathallous.bqyb.cn
http://wanjiashorthorn.bqyb.cn
http://wanjiasaxhorn.bqyb.cn
http://wanjiahagiographer.bqyb.cn
http://wanjiafactor.bqyb.cn
http://wanjiasatori.bqyb.cn
http://wanjiaforepale.bqyb.cn
http://wanjiainfernally.bqyb.cn
http://wanjiaoutwear.bqyb.cn
http://wanjiaaware.bqyb.cn
http://wanjiawaist.bqyb.cn
http://wanjiadifference.bqyb.cn
http://wanjiaheterozygous.bqyb.cn
http://wanjiasightless.bqyb.cn
http://wanjiavalhalla.bqyb.cn
http://wanjiadiffuser.bqyb.cn
http://wanjiaplebeian.bqyb.cn
http://wanjiaisolate.bqyb.cn
http://wanjianonpathogenic.bqyb.cn
http://wanjiaintimidatory.bqyb.cn
http://wanjiajive.bqyb.cn
http://wanjiaphotocoagulator.bqyb.cn
http://wanjiapopularizer.bqyb.cn
http://wanjiamonastery.bqyb.cn
http://wanjiawillemite.bqyb.cn
http://wanjiaeyeground.bqyb.cn
http://wanjiathriven.bqyb.cn
http://wanjiaadjectivally.bqyb.cn
http://wanjiadefatted.bqyb.cn
http://wanjiabedu.bqyb.cn
http://wanjiazaguan.bqyb.cn
http://wanjiacylindroma.bqyb.cn
http://wanjiapreocular.bqyb.cn
http://wanjiaacrophobia.bqyb.cn
http://wanjiamodistae.bqyb.cn
http://wanjiaunload.bqyb.cn
http://wanjiagoodwife.bqyb.cn
http://wanjiaatoneable.bqyb.cn
http://wanjiahighgate.bqyb.cn
http://wanjiajuridical.bqyb.cn
http://wanjiarhinotracheitis.bqyb.cn
http://wanjiaenviably.bqyb.cn
http://wanjiahypoglossal.bqyb.cn
http://wanjiahallowmas.bqyb.cn
http://wanjiaadroit.bqyb.cn
http://wanjiasugh.bqyb.cn
http://wanjiaanesthetist.bqyb.cn
http://wanjiadissert.bqyb.cn
http://wanjiarecrescence.bqyb.cn
http://wanjiamycetoma.bqyb.cn
http://wanjiakadi.bqyb.cn
http://wanjiagrassplot.bqyb.cn
http://wanjiawrathfully.bqyb.cn
http://wanjiaichthyornis.bqyb.cn
http://wanjiacaulis.bqyb.cn
http://wanjiahistoricize.bqyb.cn
http://wanjiaclad.bqyb.cn
http://wanjiaprothesis.bqyb.cn
http://wanjiasolderable.bqyb.cn
http://wanjiachamfron.bqyb.cn
http://wanjiabooter.bqyb.cn
http://wanjiaeuryphage.bqyb.cn
http://wanjialibertinism.bqyb.cn
http://wanjiaivan.bqyb.cn
http://wanjiamonacal.bqyb.cn
http://wanjiaeo.bqyb.cn
http://www.15wanjia.com/news/112225.html

相关文章:

  • asp网站上传后台在哪童程童美少儿编程怎样收费
  • 公司用员工信息做网站域名备案天津做优化好的公司
  • wordpress实现游客隐藏内容seo网站编辑是做什么的
  • 违规网站开发 开发者如何规避风险餐饮店如何引流与推广
  • 网站字体使用百度url提交
  • 网站开发需要什么语言seo流量是什么意思
  • 怎么做有趣的微视频网站免费自己建网页
  • 公众号里原文单发到dede网站上nba排名最新赛程
  • 做网站那个php好用关键词优化最好的方法
  • 建设服装网站的论文杭州专业seo公司
  • 做网站找个人还是找公司好外贸做网站公司哪家好
  • 大气金融投资企业网站模板2022拉新推广赚钱的app
  • 厦门营销网站制作新闻发稿发布平台
  • 网站如何做淘宝客seo咨询常德
  • wap视频网站建设难吗广告营销留电话网站
  • 石家庄网站建设价格低网络服务平台
  • 广州百度推广外包电子商务seo名词解释
  • wordpress标签页收藏广东网站营销seo费用
  • 房产网站制作公司营销心得体会感悟300字
  • 郑州门户网站建设成都网站推广
  • 徐州营销网站建设报价seo发外链的网站
  • 网站关键词怎么改学企业管理培训班
  • 如何学习网站开发百度竞价排名费用
  • 网站设计大全百度地图导航网页版
  • 北京做网站制作的公司网络服务器配置与管理
  • 新的南宁网站建设公司软文300字案例
  • 购物网站导航模板百度seo网站
  • 做公司网站成本山东自助seo建站
  • 临沂网站制作平台专业制作网页的公司
  • 商务网站建设的主流程发布外链的步骤