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

Rust学习笔记(三十九)闭包(下)

  继续解决三十八节中重复调用闭包的问题:创建一个结构体,它持有闭包及其调用结果:只有在需要结果时才会执行该闭包可以缓存结果,避免再次使用时的重复调用
  这个模式通常叫做记忆化(memoization)或惰性求值延迟计算(lazyevaluation)结构体持有闭包
  因为结构体的定义需要指定所有字段的类型,所以需要指明闭包的类型。每个闭包实例都有自己唯一的匿名类型,即使两个闭包的签名完全一样。所以需要使用泛型和traitbound。Fn系列trait
  Fn系列trait由标准库提供,所有闭包都至少实现了以下trait之一:FnFnMutFnOnce
  下面使用Fntrait修改之前的例子:srcmain。rsusestd::{thread,time::Duration};structCacherFwhereF:Fn(u32)u32,泛型F代表闭包的类型,它是一个接收u32并返回u32的闭包,Fn(u32)u32是一个特殊的语法,只适用于Fn,FnOnce和FnMut{calculation:F,value:Optionu32,在运行闭包之前,value是None;运行闭包之后,value就用来保持闭包的返回值}implFCacherFwhereF:Fn(u32)u32,{实现Cacher的关联函数,用来构造一个Cacher的实例fnnew(calculation:F)CacherF{Cacher{calculation,value:None,}}定义方法,该方法首先判断Cacher中的value是否有值若有值则说明闭包已经执行过了,可以直接返回缓存的值没有值说明是第一次使用,这时可以调用闭包,然后缓存其值并返回fnvalue(mutself,arg:u32)u32{matchself。value{Some(v)v,None{letv(self。calculation)(arg);self。valueSome(v);v}}}}fngenerateworkout(intensity:u32,randomnumber:u32){因为后面调用的value方法可能会修改expensiveclosure中value的值,所以需要声明为可变的letmutexpensiveclosureCacher::new(num{println!(calculatingslowly。。。);thread::sleep(Duration::fromsecs(2));num});ifintensity25{println!(Today,do{}pushups!,expensiveclosure。value(intensity));println!(Next,do{}situps!,expensiveclosure。value(intensity));}else{ifrandomnumber3{println!(Takeabreaktoday!Remembertostayhydrated!);}else{println!(Today,runfor{}minutes!,expensiveclosure。value(intensity));}}}fnmain(){letsumulateduserspecifiedvalue10;letsimulatedrandomnumber7;generateworkout(sumulateduserspecifiedvalue,simulatedrandomnumber);}
  运行以上代码,输出:calculatingslowly。。。Today,do10pushups!Next,do10situps!
  根据代码逻辑,expensiveclosure。value(intensity)会执行两次,但是calculatingslowly。。。只输出了一次,说明闭包只执行了一次。使用缓存器(Cacher)实现的限制Cacher实例假定针对不同的参数arg,value方法总会得到同样的值。无论我们传入的值是几,返回总是第一次传入的值。因为根据我们的逻辑,闭包只会执行一次,导致value的值只会更新一次。只能接收一个u32类型参数和u32类型的返回值
  针对这些限制,下一节会给出解决方案。

本人教师想买个家用打印机,预算10002000,能复印,能打本人从事电脑打印机销售从业十余年,自我感觉对打印机,尤其是家用打印机有一定认识,我来说一说吧。首先根据你的用途,需要一台可以打印复印彩色文件的机器,符合此要求的打印机有两……OPPOFindX4Pro堆料很猛,18G运存5100mAh今年除了华为各大国产智能手机品牌的新机更新速度都十分给力,如小米、OPPO、vivo到目前为止已经更新了两三款旗舰新机,市场份额也纷纷上涨。上半年第二季度这三个国产手机品牌在亚……共享单车投放多少?首个城市总量测算方法学出炉文羊城晚报全媒体记者严艺文近日,由交通运输部科学研究院(以下简称交科院)主办的互联网租赁自行车行业高质量发展研讨会在线上成功举办。据悉,该研讨会围绕最新出炉的首个共……如何在springboot启动之后执行一段逻辑?不知道这个问题你思考过没???或者实际业务场景中有这种诉求没?实际业务场景中我们可能接到这种业务需求:项目启动后立即执行一段逻辑,比如简单的缓存预热,数据的初始化。如果你……你好,鸿蒙操作系统!6月2日,与你相见HiCar小知识,有趣有用!今天小仙女来分享:鸿蒙知识小讲堂在万物互联时代,人均持有设备量不断攀升,设备和场景的多样性,使应用开发变得更加复杂、应用入口更加丰富。在……CyberTruck发布会曾演示失败,特斯拉公布防弹玻璃新专IT之家5月31日消息据外媒TechTimes报道,特斯拉在近日披露了用于特斯拉电动皮卡上的防弹玻璃的新专利。该专利显示,电动皮卡的防弹玻璃采用新型多层玻璃堆结构,在2焦耳的冲……可在戴口罩的时候使用!苹果测试新型FaceID据JonProsser称,苹果升级版FaceID传感器阵列正在测试中,最大的特点是可与口罩一起使用。JonProsser查看了大约75个原型设备的图像和视频,并制作了综合渲染,……永辉超市CEO发内部信工信部要求阿里腾讯等解除屏蔽链接工信部要求阿里腾讯等解除屏蔽链接工信部有关业务部门召开屏蔽网址链接问题行政指导会。会上,工信部提出有关即时通信软件的合规标准,要求限期内各平台必须按标准解除屏蔽,否则将依……快手电商想要二次生长,底气何在?丨氪金lite从4月开始品牌自播,到8月O粉节超品日活动总裁直播单场GMV超1000万、总GMV超8000万,OPPO在快手电商生态的发展速度超出许多人的想象。这4个月,我们在快手从1……直面苹果华为新品发布会官宣9月13日见9月8日消息,今天早上华为终端官方微博带来了新的发布会信息。华为终端官方微博发文称:自由创造,无界沟通。华为智慧办公新品发布会,9月13日19:30,邀您一起见证。……2500元档高性价比手机推荐,小米荣耀Realme你选谁?开学了,很多学生都会趁机给自己选购一台称心如意的手机,2500元档手机是一个不错的选择,这个价位附近的手机,无论外观性能、还是游戏拍照都会有不错的表现。今天就为大家推荐3款25……跨境电商如何做好引流?做亚马逊速卖通独立站的看过来01流量从哪里来?方向对了,才不会南辕北辙。在回答这个问题之前,我们需要了解流量从哪里来:当私域流量的概念开始觉醒,关于流量的来源也变得更加清晰:公域私域。私域又分之为自……
筋膜枪是智商税?飞宇kicaK2与K2mini开箱上手筋膜枪也是最近几年兴起的新鲜玩意,对于经常运动的人来说,筋膜枪就能起到对运动过程中产生的肌肉疲劳、酸痛,甚至关节损伤等问题可以舒缓止痛以及缓解运动疲劳,今天香蕉就开箱两个飞宇旗……高颜值户外风,悠启撒哈拉旅行箱上手体验行李箱对于喜欢户外活动以及出差旅行的人来说,是出行必不可少的东西。最近我就入手了一款悠启撒哈拉旅行箱,接下来就来谈谈它的简单上手体验吧!外包装什么的就不展示了,直接看旅行……炉石传说最简单的任务?盗贼新体系降临,1费神卡太强了新版本上线的日子马上就要到了,不知道大家有没有准备好金币,最近看了好几局试玩比赛,发现暴风城这个版本的单卡质量不是一般的高,可以说是近几年来,强度最超模的一次。另外这次的超级预……如何彻底根治NS摇杆漂移?保姆级教程来了由于任地狱近几世代的一贯风格,相信很多早期甚至是首发入坑的朋友在玩switch时候都遇到过这样那样的因为硬件做工所导致的问题。这其中最常见也是最影响实际操作的,就要属摇杆……苹果耳机单只不出声?千万别慌,解决方法在此若为有线耳机,首先可以检查一下不响的那只耳机线是不是弯折的比较厉害,若弯折的比较厉害,可以舒展开再试试,其次,可以将耳机拔下来重新插紧试试,若不能解决问题,可以换一个音频试试,……纯电版高配帝豪GS了解一下?起售不足13万,续航最高550k吉利是目前中国汽车厂商销量最出色的品牌,它旗下拥有很多家喻户晓的车型,比如帝豪家族、博越等,而帝豪家族无疑是吉利最庞大的分支,像帝豪、帝豪GL、帝豪GS等,都是销量很不错的代表……日系韩系有啥差距?新日产奇骏对比第五代途胜L,该如何选择?日系韩系之间该选择谁,在部分人心中恐怕还是没有准确的答案,就像即将上市的第四代日产奇骏跟已经上市的第五代途胜L应该怎么选择,不少人可能还是拿不定主意。这不就有粉丝留言称自己准备……竞争,成就人生在生活中我喜欢有一个竞争对手,因为有了对手我们的人生才不会像白开水,而是让生活变得五彩斑斓。人生为对手鼓掌是一种智慧,我认为智慧才是为人处世的资本,我愿意放低姿态为对手加油,因……智能锁与网络摄像头已成为最受欢迎的智能家居设备据ParksAssociates的最新消费者研究显示,美国34的宽带家庭已经拥有智能家居设备,者一比例远高于高于2018年的24,说明了近几年智能家居产品的渗透率一直处于稳定增……杨国福麻辣烫,让你看看什么叫量多今天点外卖那叫一顿操作猛如虎系列看看什么叫丰盛肉类撒尿牛丸,猪肉脯,羊肉,香肠美滋滋素菜白菜,豆芽,海带,菇,日本豆腐,木耳主食当然还是方便面了,感觉比……MILLAGroup在活动中推出配备LeddarPixellMILLAGroup在6月的两次重大活动中推出配备LeddarPixell的自动驾驶班车15级ADAS和AD传感技术领域的全球领先企业LeddarTech很高兴地宣布,位……上市即成妖股,叮咚买菜正在成为下一个AMC?A股妖股多,对中国股民来说已经习以为常;中概股在上市许久之后突然高光一下,也不罕见。但像叮咚买菜这样,上市前后就妖气十足,这在中美两国近年来股票市场历史上,是极为罕见的。……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网