【Rust自学】10.1. 提取函数以消除重复代码 10.1 提取函数以消除重复代码10.1.1. 重复代码看个例子fn main(){ let number_list vec![1,2,3,4,5]; let mut largest number_list[0]; for item in number_list.iter(){ if item largest{ largest item; } } println!(The largest number is {}, largest); }这个程序的目的是找出Vector中的最大值。其逻辑很好理解把第一个元素作为临时最大值再使用循环比较Vector中的每个元素。如果当前元素大于当前存储的最大值就把当前元素赋给largest。输出The largest number is 5如果此时又新增了一个需求需要在另一个Vector中找出最大值仍然可以按同样的逻辑来写fn main(){ let number_list vec![1,2,3,4,5]; let mut largest number_list[0]; for item in number_list.iter(){ if item largest{ largest item; } } println!(The largest number is {}, largest); let number_list vec![6,7,8,9,10]; let mut largest number_list[0]; for item in number_list.iter(){ if item largest{ largest item; } } println!(The largest number is {}, largest); }但可以看出这样写会产生大量重复代码。重复代码容易出错。一旦需要修改逻辑就必须在多处做同样的修改。因此非常推荐通过定义函数来创建抽象。代码如下fn largest(list: [i32]) - i32{ let mut largest list[0]; for item in list.iter(){ if item largest{ largest item; } } largest } fn main(){ let number_list vec![1,2,3,4,5]; let largest_num largest(number_list); println!(The largest number is {}, largest_num); let number_list vec![6,7,8,9,10]; let largest_num largest(number_list); println!(The largest number is {}, largest_num); }这里声明了一个名为largest的函数。它接收元素类型为i32的切片并返回一个i32。函数体内的逻辑与上文相同。需要注意的是参数[i32]是切片本质上就是引用。切片的具体介绍见 4.5. 切片Slice这里不再赘述。在保持逻辑不变的情况下这个函数还可以写成fn largest(list: [i32]) - i32{ let mut largest list[0]; for item in list{ if item largest{ largest item; } } largest }与前一版本相比这里去掉了显式的迭代器调用.iter()但不影响代码行为因为切片引用本身实现了IntoIterator所以for可以直接遍历list。这两种写法在语义上完全等价。Rust 的for循环会为切片自动调用iter()因此可以省略显式的迭代器调用。选择哪种写法主要取决于代码风格和个人偏好。还有另一种写法fn largest(list: [i32]) - i32{ let mut largest list[0]; for item in list{ if *item largest{ largest *item; } } largest }这个版本与前两种最大的不同是它显式地对item解引用*item以便比较其值。在前两种写法中使用了通过解引用模式匹配进行解构。可以这样理解item i32两边同时去掉于是item i32。largest也是i32类型两者类型一致可以直接比较后面自然就不需要再解引用。如果item前面不加那么item的类型就是i32而largest是i32两者不能直接比较所以必须先解引用也就是在item前面加*。输出The largest number is 5 The largest number is 1010.1.2. 消除重复的步骤识别重复代码创建函数把重复代码提取到函数体中并在函数签名中指定函数的输入和返回值用函数调用替换重复代码

相关新闻

最新新闻

如何在同一个文件夹选取多个文件并压缩(送免费压缩软件)

如何在同一个文件夹选取多个文件并压缩(送免费压缩软件)

第一步:按住ctrl键不放,然后数遍左键点击需要选择的文件(如果要全选的话就直接ctrlA) 第二步:右键点击,然后就可以进行操作:WinRAR——四个里面选一个;然后就可以看到压缩成功补充:如果电脑上有…

2026/7/23 19:20:34
OpenWRT软路由上Docker部署青龙面板+Ninja的避坑指南(附常见错误解决方案)

OpenWRT软路由上Docker部署青龙面板+Ninja的避坑指南(附常见错误解决方案)

在OpenWRT软路由上构建Docker化任务管理平台:从青龙面板到Ninja的深度部署与排障实践 对于许多技术爱好者而言,将闲置的硬件资源转化为一个稳定、高效的家庭自动化中心,是一件充满乐趣和成就感的事情。OpenWRT软路由凭借其出色的网络控制能力和丰富的软件生态,成为了实现这…

2026/7/23 19:20:34
斐讯N1盒子刷软路由OpenWrt

斐讯N1盒子刷软路由OpenWrt

title: 斐讯N1盒子刷软路由OpenWrt date: 2022-06-22 14:42:47 最近探索了下 N1 刷成软路由的方式,总算做成了比较满意的版本 软路由 openwrt 系统 一个专门为路由器而定制的开源系统,集成路由器的基本上网功能,并且还提供了处理网络数据的…

2026/7/23 19:20:34
医疗设备全生命周期管理系统+学前领先+智慧医院高效运营的核心助力​

医疗设备全生命周期管理系统+学前领先+智慧医院高效运营的核心助力​

近两年国家相关部门密集发布一些列法律法规及文件,从设备管理、临床使用、质量管理、成本效益分析、档案管理等多方面提出明确监管要求。在当今医疗行业快速发展的时代,医院的医疗设备数量与日俱增,种类愈发繁杂。从基础的听诊器、血压计&…

2026/7/23 19:20:34
WAIC 2026|西部数据揭示AI存储新范式:AI不仅是计算,更是数据

WAIC 2026|西部数据揭示AI存储新范式:AI不仅是计算,更是数据

7月17日至20日,世界人工智能大会(WAIC)在上海世博中心如期举行。在这场全球 AI 领域的年度盛会上,西部数据以"AI 背后的驱动力"为主题,呈现了存储基础设施如何支撑 AI 的规模化发展。西部数据在此次大会上释…

2026/7/23 19:20:34
原神单机版 v6.4/6.5/6.6 免费下载

原神单机版 v6.4/6.5/6.6 免费下载

自己做到,请勿倒卖下载:获取完整客户端(含6.6与6.5最新补丁,下了6.4的包体后找到文件夹里面的补丁拖入即可) 解压:右键解压至任意文件夹(建议关闭杀毒软件)环境:跟随教程…

2026/7/23 19:15:34

月新闻