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

谁有做开档棉裤的网站啊分销平台app

谁有做开档棉裤的网站啊,分销平台app,wordpress+修改邮箱设置,icp查询系统13.4.0. 写在正文之前 Rust语言在设计过程中收到了很多语言的启发,而函数式编程对Rust产生了非常显著的影响。函数式编程通常包括通过将函数作为值传递给参数、从其他函数返回它们、将它们分配给变量以供以后执行等等。 在本章中,我们会讨论 Rust 的一…

13.4.0. 写在正文之前

Rust语言在设计过程中收到了很多语言的启发,而函数式编程对Rust产生了非常显著的影响。函数式编程通常包括通过将函数作为值传递给参数、从其他函数返回它们、将它们分配给变量以供以后执行等等。

在本章中,我们会讨论 Rust 的一些特性,这些特性与许多语言中通常称为函数式的特性相似:

  • 闭包(本文)
  • 迭代器
  • 使用闭包和迭代器改进I/O项目
  • 闭包和迭代器的性能

喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(=・ω・=)
请添加图片描述

13.4.1. 闭包可以捕获它所在的环境

闭包有一项函数所不具备的功能:闭包可以访问定义它的作用域内的变量。

看个例子:

fn main() {let x = 4;let equal_to_x = |z| z == x;let y = 4;assert!(equal_to_x(y));
}

闭包的部分在:

let equal_to_x = |z| z == x;

这样写有的人可能不太能分清===在这里的作用,换一种写法:

let equal_to_x = |z| {z == x;
}

也就是说这个闭包的形参是z,它会和x(也就是4,因为上文定义了x = 4)进行比较,返回布尔类型,如果相等就是true,反之则为false

这里闭包直接访问了同在一个作用域的变量x,这是函数做不到的。

但使用这个特性是有代价的,它会产生内存开销。大多数情况下我们不需要它捕获环境,更不想产生内存开销,所以函数它就不允许从环境中捕获变量,而定义和使用函数就永远不会产生这一类型的开销。

13.4.2. 闭包从所在环境捕获值的方式

闭包通过三种方法来从环境捕获值,这三种与函数获得参数的三种方法一样:

  • 取得所有权,其trait名为FnOnceOnce代表一次,因为闭包不能多次获取并消耗同一个变量,所以它只能被调用一次。
  • 可变借用,其trait名为FnMut
  • 不可变借用,其trait名为Fn

当程序员在创建闭包时,通过闭包对环境值当使用,Rust会推断出具体使用哪个trait:

  • 所有的闭包都实现了FnOnce,因为闭包都至少可以被调用一次
  • 没有移动捕获变量的实现了FnMut
  • 无需可变访问捕获变量的闭包实现了Fn

实际上这三者有包含关系:所有实现了Fn的都实现了FnMut,所有实现了FnMut的都实现了FnOnce

13.4.3. move关键字

在参数列表前使用move关键字,可以强制闭包取得它所使用的环境值的所有权。当将闭包传递给新线程以移动数据使其归新线程所有时,此方法最为有用。

看个例子:

fn main() {let x = vec![1, 2, 3];let equal_to_x = move |z| z == x;println!("can't use x here {:?}", x);let y = vec![1, 2, 3];assert!(equal_to_x(y));
}

使用了move关键字后x的所有权就移动到了闭包的里面,后面就用不了x

13.4.4. 最佳实践

当你指定Fn trait bound之一时,首先用Fn,基于闭包内的情况,如果需要FnOnceFnMut,编译器会再告诉你。

http://www.yayakq.cn/news/760914/

相关文章:

  • 太原网站搜索排名平邑的网站都是谁做的
  • 网站建设合同服务事项临沂门户网站制作
  • 做时尚网站的目的北京seo优化多少钱
  • ftp搭建wordpress大地seo
  • 湖南公司网站建设品牌设计作品集
  • 美团网站怎么做wordpress的特点
  • 陵水网站建设费用工信部icp备案是什么意思
  • wordpress建站课程wordpress 增加页面
  • 微信视频网站怎么做的好seo有名气的优化公司
  • 北海建设网站番禺网站建设设计
  • 词爱站的关键词网站建商城
  • 网站备案多少岁天津网站设计方案
  • 山西省大同市网站建设公司手机网页 模板
  • 聊城网站策划网站建设发言
  • 电子商务网站建设与管理考卷泰安网络电视台直播
  • 利用ionic做的网站技术博客wordpress主题
  • 高端网站设计收费wordpress的评论插件
  • 宁乡做网站网站 跳出率 多少
  • 信息产业部互联网网站管理工作细则网站开发算互联网公司吗
  • 摄影后期教程网站怎么样学好网页设计
  • 十大SEO网站外链建设误区住建部2017建设工程合同范本
  • wordpress自动播放音乐专业网站优化培训
  • 产品介绍网站设计生意街创业商机网
  • 绍兴网站建设技术外包如何快速做h5网站
  • 文档下载网站 建设点餐小程序开发需要多少钱
  • 常州网络公司中环互联网网站建设网站推广软件哪家好
  • 网站前端凡科商城小程序怎么样
  • 龙华网站建设推广平台网站建设论文的摘要
  • 如何通过c语言来做网站昆山智能网站建设
  • php网站超市上海网站设计开发公司