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

官方网站做兼职杭州网站建设hzfwwl

官方网站做兼职,杭州网站建设hzfwwl,河南建筑材料信息网,企业在线咨询服务系统自定义 Counter 结构体类型#xff0c;并实现迭代器。其他语言的场景#xff0c;读取数据库行数据时#xff0c;使用的就是迭代器。我们使用for语言遍历数组#xff0c;也是一种迭代。 结构体对象实现 Iterator trait#xff0c;创建自定义的迭代器#xff0c;只需要实现…自定义 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) - OptionSelf::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://www.yutouwan.com/news/140513/

相关文章:

  • 网站托管是什么3d建模是干什么的
  • seo云优化软件破解版抖音seo排名系统公司
  • 贵阳德天信网站建设php wordpress配置
  • 西南城乡建设部网站首页wordpress插件商品对比
  • 做微商哪个网站比较好建设网站需要什么资质
  • 移动互联网开发平台基于linux安卓网站seo插件
  • 佛山网站搭建公司大学生网站设计作业
  • 樟木头镇网站建设创建网站超市
  • 北京网站制作招聘网做网站建设最好学什么
  • 能赚钱的网站个人pc wordpress
  • 广厦建设集团官方网站无锡网站建站公司
  • 能自己做网站吗旅游网站的网页设计参考文献
  • 百度小程序给网站做链接公司招聘网站排行榜
  • 有没有专门做蛋糕的网站莱州网站建设哪家好
  • 公司网站备案申请网站交换链接的网络营销意义
  • 江西网站建设哪家公司好广州最近传染病情况
  • 网站建设之织梦模板餐饮品牌策划
  • 漂亮的蓝色网站logo成品效果图网站
  • 丰县徐州网站开发注册安全工程师报名条件和要求
  • 京东的网站规划与建设市场分析邯山区建设局网站
  • 泉州网页设计制作wordpress 头部优化
  • asp手机网站自动跳转家具品牌网站怎么做
  • 学到什么程度可以做网站无锡网站制作8
  • 广东贸易网站建设哪家网站权重是什么意思
  • 北京网站建设华网做qq主题的网站
  • 网站营销建设策划案南阳旅游网站建设
  • 免费学编程国内网站thinkphp购物网站开发视频
  • 青岛住房和城乡建设厅网站首页seo查询在线
  • 电商网站管理系统模板下载晋江网站网站建设
  • 网站开发工程师中级高级企业简介优势项目案例等推广