游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

Rust学习笔记(三十八)闭包(上)

  什么是闭包
  可以捕获其所在环境的匿名函数叫做闭包。有4个特点:是匿名函数可以将其保存为变量并作为函数的参数可以在一个地方创建闭包,然后在另一个上下文中调用闭包来完成运算可以从其定义的作用域捕获值例子:生成自定义运动计划的程序
  本例算法逻辑并不是重点,重点是算法中的计算过程需要几秒钟的时间。而我们的目标是不发生不必要的等待。即仅在必要时调用算法,而且只调用一次。srcmain。rsusestd::{thread,time::Duration};fnmain(){letsumulateduserspecifiedvalue10;letsimulatedrandomnumber7;generateworkout(sumulateduserspecifiedvalue,simulatedrandomnumber);}fnsimulatedexpensivecalculation(intensity:u32)u32{println!(calculatingslowly。。。);thread::sleep(Duration::fromsecs(2));sleep模拟等待时间intensity}fngenerateworkout(intensity:u32,randomnumber:u32){ifintensity25{运动强度小于25时,调用两次耗时算法生成两个运动计划println!(Today,do{}pushups!,simulatedexpensivecalculation(intensity));做一定时间的俯卧撑println!(Next,do{}situps!,simulatedexpensivecalculation(intensity));做一定时间的仰卧起坐}else{大于等于25时,又分两种情况ifrandomnumber3{随机数为3时,休息,不调用耗时算法println!(Takeabreaktoday!Remembertostayhydrated!);}else{否则调用耗时算法,生成跑步计划println!(Today,runfor{}minutes!,simulatedexpensivecalculation(intensity));}}}
  根据以上代码的逻辑,耗时方法最多执行2次。不符合我们的目标。我们可以做以下修改:srcmain。rsfngenerateworkout(intensity:u32,randomnumber:u32){letexpensiveresultsimulatedexpensivecalculation(intensity);ifintensity25{println!(Today,do{}pushups!,expensiveresult);println!(Next,do{}situps!,expensiveresult);}else{ifrandomnumber3{println!(Takeabreaktoday!Remembertostayhydrated!);}else{println!(Today,runfor{}minutes!,expensiveresult);}}}
  此时无论哪种情况,耗时代码只会运行一次。但是当intensity25并且randomnumber3时,并没有用到耗时方法的返回值,所以在此情况下会造成一次不必要的执行。这里的最佳方案是:只有在需要耗时方法的返回值时,才会调用它。可以使用闭包来实现:srcmain。rsfngenerateworkout(intensity:u32,randomnumber:u32){只是定义闭包(匿名函数),而不执行,只有它后跟着()时才会执行letexpensiveclosurenum{println!(calculatingslowly。。。);thread::sleep(Duration::fromsecs(2));num};ifintensity25{使用expensiveclosure(intensity)闭包println!(Today,do{}pushups!,expensiveclosure(intensity));println!(Next,do{}situps!,expensiveclosure(intensity));}else{ifrandomnumber3{println!(Takeabreaktoday!Remembertostayhydrated!);}else{println!(Today,runfor{}minutes!,expensiveclosure(intensity));}}}
  但是这里当intensity25时,闭包依然被调用了两次。可以将expensiveclosure(intensity)的值绑定到一个变量上存起来,然后使用。但是我们不这样解决,后面再看具体实现。闭包的类型推断
  闭包不强制要求标注参数和返回值类型,这一点与函数不同。因为函数是暴露给用户的接口,我们严格定义函数的参数和返回值类型,有利于用户的理解和使用。但是闭包并不用于暴露给用户,不用命名他们或暴露给库的用户调用。闭包通常很短小,通常只是在狭小的上下文中工作,编译器能推断出其类型。当然也可以手动标注类型,例:letexpensiveclosurenum:u32u32{println!(calculatingslowly。。。);thread::sleep(Duration::fromsecs(2));num};函数和闭包的定义语法比较
  函数:fnaddonev1(x:u32)u32{x1}闭包:letaddonev2x:u32u32{x1}闭包:letaddonev3x{x1}闭包:letaddonev4xx1匿名函数体只有一句时,可省略{}闭包的类型推断
  注意:闭包的定义最终只会为参数返回值推断出唯一具体的类型,例:fnmain(){letexampleclosurexx;letsexampleclosure(1);letnexampleclosure(1。1);}
  此时就会报错,因为第一次使用时,编译器已经推断出参数与返回值是i32类型,已经确定了,后面再传浮点数时就会报错。

你用手机拍过哪些满意的照片?近日我拍到一组非常规鸡冠花。同科非同花,奇异簇锦须;浅红却鲜艳,谁见谁称奇。我是要么在单位上班,要么下班宅在宿舍玩手机,好着我是医生,40岁开始吃少量维生素保护视力,视力……快手永久清退朵唯产品9倍赔偿用户,但直播售假仍屡禁不止文AI财经社张可心编辑杨洁继薇娅带货山寨Supreme联名商品翻车后,快手头部主播驴嫂平荣再陷售假风波。日前,快手声明称,向所有在快手电商购买了朵唯12pro……在我们的工作中协同软件是否必要,有哪些协同软件比较好的?如果工作当中需要需要同事协作的地方多,或者有异地工作但要相互配合的情况存在,使用协同软件是非常好的。废话不多说,直接上软件!1。钉钉钉钉(DingTalk)是……华为P30Pro上手小试走上了50倍望远镜夜视仪的歪路?华为在巴黎的全球发布会上终于公布了P30及P30Pro,其中最受注目的是P30Pro代表了更高端的拍照功能。一如预告,P30Pro以潜望式镜头,带来5倍光学变焦、10倍混合变焦……独家丨高晓松从阿里离职,阿里大文娱告别矮大紧8月31日,Tech星球独家消息,原阿里音乐董事长、著名音乐人高晓松,已于近日从阿里离职。Tech星球就此向阿里大文娱方面求证,对方表示并不清楚。2015年7月,高晓松作……危险的虚拟货币的布雷顿森林体系USDT(泰达币)布雷顿森林酒店进入2021年后,比特币在马斯克等一些新经济领袖的力捧下持续大涨,4月份创出了64000多美元的新高。当时的币圈充满亢奋,关于比特币马上冲击10万美元的议论……996。ICU在GitHub星星已破3w,啥?还有007996起源2019年开年杭州电商公司有赞在公司年会宣布未来将执行996工作制(早九点至晚九天每周工作六天),引发大量员工不满,有赞高管甚至声称如果工作家庭不好平衡,可以选……女员工遭侵害后,阿里发反思与行动,无条件支持员工拒绝劝酒8月12日晚间,阿里巴巴官方发布《我们的反思与行动》的行动进展。阿里巴巴称8月9日凌晨,已经公布了《关于807事件的阶段性调查结果和处理决定》,目前调查组的工作已经接近尾声,结……手把手带你入坑抓包神器MitmProxy开源前线(ID:OpenSourceTop)猿妹综合整理综合自:https:earthly。devblogmitmproxy你是否会对应用程序正在发出的请求感到好奇……雷丁芒果正式上市售价2。985。49万元日前,第一电动网从相关渠道获悉,雷丁芒果正式上市,售价区间为2。985。49万元。作为一款A00级别纯电动微型车,在此前给人的印象一直属于是低速电动车,此次升级改款后,在……微信中最让你恶心的一项功能是什么?最恶心的是被删除了还不知道。好友满了没地方放。不知道哪个删了自己最恶心的事是对方辩不过我就拉黑了我。我少讲一点已被近50个人拉黑了。我还能看到他在胡说八道,可就没办法批驳……人类有没有可能被设计出来?人类有没有可能是被设计出来的?从地球诞生一直到人类诞生,期间经过了无数个物种,甚至有着比人类更加古老的生物,那么为何只有人类会脱颖而出?人类未来又将如何发展?都是一连串的……
幸福有礼,抚州宝骏RS3直降4。7手握购车款犹豫不决的你是不是还在为买车而观望,当前五菱汽车抚州国鼎销售中心店宝骏RS3直降0。3万元颜色可选,现车充足,优惠时间11月04日11月04日,犹豫不决的朋友不妨到店……与我国无人机表演相比,东京奥运会无人机表演让人感觉平庸?东京奥运会和北京奥运会开幕式相比,哪个更让人惊艳?这个问题,相信答案很简单。很多网友都说,看完东京奥运会后,我马上找出北京奥运会开幕式的视频,又看了一遍。北京奥运会……中兴通讯2016年人均年薪22万涨幅达21,持续减员加薪3月24日,中兴通讯发布了2016年年度报告。报告显示,2016年中兴通讯实现营业收入1012。3亿元;归属于上市公司普通股股东的净利润亏损为23。57亿元,利润亏损主要原因是……为什么说如今的手机没法评判音质?经常有人问我:XX新出的手机,音质怎么样?比如这两天我主力机换成iQOO5Pro,晒了下,果然又有粉丝留言问这个。以前这个问题挺好回答的,不就是耳机口么?我怼一下大概齐都……速腾遇到对手,搭载地球梦1。5T发动机,加92粗粮续航长近期汽车市场出现了芯片短缺的现象,很多汽车基本生产工序已经完成,就只等芯片的到位了,以至于很多汽车厂商推迟了新车型的上市,但是对于某个品牌的忠实粉丝来说,并不是因为等待而放弃。……没打第三针?不能在北京做这些工作中国首都北京市昨天(10月28日)宣布,未接种第三剂加强针人员,不得从事重点岗位工作。综合中新网和环球网报道,北京市住房和城乡建设委员会党组成员、副主任丁胜在新闻发布上说……帝豪L官图首发撞衫没所谓,有料才重要?在今年成都车展上,吉利汽车刚刚首发亮相了基于能量风暴新设计风格打造的首款SUV博越X,没想到的是,没过几天,吉利就通过网络发布了帝豪L的官图。从第一眼视觉感受来看,帝豪L……内存小且浏览速度极快!手机新型搜索工具,你值得拥有羊搜搜是一款便捷小巧,功能超多而且超级实用的小工具,支持的资源很丰富,喜欢看小说的,喜欢磁力搜索的,喜欢看视频的,喜欢听免费音乐的,以及喜欢看漫画的,小羊搜搜都可以满足你的需求……手机圈中的弄潮儿白色系手机的TOP3近些年来,手机产业不断进步发展,手机功能也日益完善,但同时也出现了问题,那就是各个品牌的外观设计越来越同质化,2021年,各家无论是高端旗舰机型,还是千元性价比机型,设计上大部……群思动态群思科技武汉办迎新活动回顾在这个春天,群思迎来了一批优秀的新同事,他们的到来给群思带来了不一样的活力和风采,为了欢迎他们,群思武汉办欢聚一堂举办了一场迎新活动。老员工们提前备好了零食和游戏,为了让……卢伟冰2至3年达成3万家小米之家,国内销量超越OPPO荣耀v近日,小米之家万店成就在深圳达成,新店面积达到了600平方米,采用了更为高端的设计风格,更强调场景化体验。与此同时,小米集团合伙人、中国区总裁卢伟冰为此也接受了媒体的采访……在线教育千亿市场,智能触控设备如何应势力而动?受疫情影响,国内线上教育变得火爆,即便是在特殊的环境下,教育学习同样不会中断。巨大的市场让很多投资者觉得有利可图,在线教育机构也如雨后春笋般纷纷冒了出来。字节跳动由于海外扩张受……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网