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

Rust 学习笔记:关于闭包的练习题

Rust 学习笔记:关于闭包的练习题

  • Rust 学习笔记:关于闭包的练习题
    • 问题 1
    • 问题 2
    • 以下程序能否通过编译?若能,输出是?
    • 以下程序能否通过编译?若能,输出是?
    • 考虑该 API,空白处填写哪个 Fn trait 最合适?
    • 考虑该 API,空白处填写哪个 Fn trait 最合适?

Rust 学习笔记:关于闭包的练习题

参考视频:

  1. https://www.bilibili.com/video/BV1u5NZe7Eyz

问题 1

下列哪项最能描述为什么 Rust 会推断闭包参数/返回值类型,但不会推断顶层函数的参数/返回值类型的理由?

A. 由于向后兼容性需要与旧版 Rust 兼容。
B. 顶层函数可以是库外部接口的一部分,而闭包不能直接暴露。
C. 由于停机问题(halting problem),从数学上讲,Rust 推断顶层函数类型是不可能的。
D. 任何可分配给变量的东西都可以推断类型,而顶层函数不能分配给变量。

答:B。

问题 2

Rust 允许在闭包的参数中进行模式匹配,包括使用下划线。代码如下:

let f = |_| ();
let s = String::from("Hello");
f(s);

A. f 读取 s 然后丢弃结果。
B. f 对 s 没有影响。
C. f 导致 s 立即被丢弃。
D. f 捕获 s 在其环境中。

答:C。

以下程序能否通过编译?若能,输出是?

fn main() {let mut s = String::from("hello");let mut add_suffix = || s.push_str(", world!");println!("{}", s);add_suffix();
}

答:不能通过编译。

以下程序能否通过编译?若能,输出是?

fn main() {let mut s = String::from("Hello");let mut add_suffix = |s: &mut String| s.push_str(" world");println!("{}", s);add_suffix(&mut s);
}

答:可以通过编译。输出 Hello。

考虑该 API,空白处填写哪个 Fn trait 最合适?

fn for_each_mut<T, F: ____(&mut T)> (v: &mut Vec<T>, mut f: F) {for x in v.iter_mut() {f(x);}
}

答:FnMut。

因为这个闭包需要多次调用,并且改变数组 v 中的元素值。

考虑该 API,空白处填写哪个 Fn trait 最合适?

pub struct Analyzer<F> {postprocess: F,
}impl<F: ___(i32) -> i32> Analyzer<F> {fn process(&self, n: i32) -> i32 { /* ... */ }pub fn pipeline(&self, n: i32) -> i32 {let n = self.process(n);(self.postprocess)(n)}
}

答:Fn。

因为这个闭包需要改变所有权。

http://www.lryc.cn/news/2392502.html

相关文章:

  • 记一次前端逻辑绕过登录到内网挖掘
  • 有什么excel.js支持IE11,可以显示EXCEL单元格数据,支持单元格合并,边框线,单元格背景
  • x86 与 ARM 汇编深度对比:聚焦 x86 汇编的独特魅力
  • Springboot 整合 WebSocket 实现聊天室功能
  • 用 Trae IDE 打造一个桌面小爬虫:从 PyQt5 开始,轻松采集掘金首页内容
  • python和风api获取天气(JSON Web Token)
  • 模板应用更新同步到所有开发中的应用
  • git和gitee的常用语句命令
  • 52、C# 泛型 (Generics)
  • 理解 Vue 2 的响应式原理:数据劫持与依赖收集的背后
  • 深入理解 Pinia:Vue 状态管理的革新与实践
  • Dubbo高频面试题
  • Allegro X PCB设计小诀窍--05.如何在Allegro X中实现隐藏电源飞线效果
  • 一篇文章教会你ESP8266串口WIFI无线模块实现物联网无线收发,附STM32代码示例
  • 算法-基础算法
  • 特种设备作业人员-G3锅炉水处理如何备考学习?
  • Reactor模式详解:高并发场景下的事件驱动架构
  • UniApp 生产批次管理模块技术文档
  • 项目日记 -Qt音乐播放器 -设置任务栏图标与托盘图标
  • 国产 BIM 软件万翼斗拱的技术突破与现实差距 —— 在创新与迭代中寻找破局之路
  • 记录算法笔记(2025.5.29)最小栈
  • Android SurfaceFlinger核心工作机制
  • Golang|etcd服务注册与发现 策略模式
  • 深度解析UniApp盲盒系统开发:从源码架构到多端部署全流程
  • STM32的OLED显示程序亲测可用:适用于多种场景的稳定显示解决方案
  • 【AI News | 20250529】每日AI进展
  • Day12 - 计算机网络 - HTTP
  • Linux驱动学习笔记(十)
  • 如何优化Elasticsearch的搜索性能?
  • TI dsp FSI (快速串行接口)