【Rust自学】13.4. 闭包 Pt.4:使用闭包捕获环境
13.4 闭包 Pt.4使用闭包捕获环境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。注意z x后面没有分号如果加了分号这个代码块的返回值就会变成()而不是比较结果。这里闭包直接访问了同在一个作用域的变量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!(cant use x here {:?}, x); let y vec![1, 2, 3]; assert!(equal_to_x(y)); }使用了move关键字后x的所有权就移动到了闭包里面后面就用不了x了。13.4.4. 最佳实践当你指定Fntrait bound之一时首先用Fn。基于闭包内的情况如果需要FnOnce或FnMut编译器会再告诉你。

相关新闻

【无标题】简短的介绍

【无标题】简短的介绍

自我介绍大学生小伟目标:本人无太大志向只想能有一个好的工作安稳过日目前看来我只能努力学习加油

2026/7/23 18:57:44 阅读更多 →
【Rust自学】13.5. 迭代器 Pt.1:迭代器的定义、iterator trait和next方法

【Rust自学】13.5. 迭代器 Pt.1:迭代器的定义、iterator trait和next方法

13.5 迭代器 Pt.1:迭代器的定义、iterator trait和next方法 13.5.0. 写在正文之前 Rust语言在设计过程中受到了很多语言的启发,而函数式编程对Rust产生了非常显著的影响。函数式编程通常包括通过将函数作为值传递给参数、从其他函数返回它们、将它们分…

2026/7/23 18:57:44 阅读更多 →
【Rust自学】12.5. 重构 Pt.3:移动业务逻辑

【Rust自学】12.5. 重构 Pt.3:移动业务逻辑

12.5 重构 Pt.3:移动业务逻辑 12.5.0. 写在正文之前 第12章要做一个实例的项目——一个命令行程序。这个程序是一个grep(Global Regular Expression Print),是一个全局正则搜索和输出的工具。它的功能是在指定的文件中搜索出指定的文字。 这个项目分为…

2026/7/23 18:56:44 阅读更多 →

最新新闻

NLP与大型语言模型核心技术解析与应用实践

NLP与大型语言模型核心技术解析与应用实践

1. NLP与大型语言模型概述自然语言处理(NLP)作为人工智能领域最具挑战性的分支之一,正在经历以大型语言模型(LLM)为核心的技术革命。我至今记得第一次用GPT-3生成业务报告时的震撼——那些逻辑连贯的段落竟然完全由机器…

2026/7/23 19:12:49 阅读更多 →
FPD-Link III SerDes集成I2S音频传输:原理、配置与实战

FPD-Link III SerDes集成I2S音频传输:原理、配置与实战

1. 项目概述:在FPD-Link III链路上搞定I2S音频传输在汽车座舱或者高端显示系统里搞音视频集成,最头疼的往往不是视频,而是音频。视频有成熟的LVDS、eDP这些标准接口,走线清晰,协议明确。但音频呢?传统的模拟…

2026/7/23 19:12:49 阅读更多 →
ADS 501端口:TCNC.NcTaskSaf

ADS 501端口:TCNC.NcTaskSaf

面向TwinCAT PLCPLC项目,一级菜单目录点击Scope->二级子目录Target Browser弹出子窗口双击501:TCNC.NcTaskSaf控制器建议只允许读取这些变量

2026/7/23 19:12:49 阅读更多 →
AI Agent如何重塑程序员工作流与必备技能

AI Agent如何重塑程序员工作流与必备技能

1. AI Agent如何重塑程序员的工作场景最近半年,我团队里三位资深开发者的日常工作发生了微妙变化:代码审查时间减少了40%,但交付质量反而提升了15%。这个反直觉现象的背后,是AI Agent技术正在对编程工作流进行静默但深度的重构。不…

2026/7/23 19:12:49 阅读更多 →
VCSA 8.0升级8.0U2后“缺少补丁更新”告警彻底解决|LCM批量补丁更新标准流程

VCSA 8.0升级8.0U2后“缺少补丁更新”告警彻底解决|LCM批量补丁更新标准流程

VCSA 8.0升级到8.0U2后弹出缺少补丁更新告警,属于版本升级后的典型残留合规告警,标准解决方案:登录Broadcom官方支持门户下载VCSA 8.0U2最新累积补丁包,通过vSphere LCM生命周期管理器执行集群/主机批量补丁更新,同步修…

2026/7/23 19:12:49 阅读更多 →
c#面试知识汇总

c#面试知识汇总

show和showDialog的区别?show属于非模态,showDialog属于模态,showDialog需等当前窗口关闭后才能进行其他交互,show相反不需要关闭当前窗口即可交互。另外show是异步,showDialog是同步2.什么是大小端?大小端…

2026/7/23 19:11:49 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻