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

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.xdnf.cn/news/669493.html

相关文章:

  • Flink系列文章列表
  • 分布式系统中的网络编程
  • wordpress迁移到Hostinger
  • 爬虫入门指南-某专利网站的专利数据查询并存储
  • YOLOv2 深度解析:目标检测领域的进阶之路
  • 【文献阅读】EndoChat: Grounded Multimodal Large Language Model for Endoscopic Surgery
  • 【HW系列】—目录扫描、口令爆破、远程RCE流量特征
  • 攻防世界-ics-07
  • 【Web应用】基础篇04-功能详解-权限控制(创建菜单--分配角色--创建用户)
  • 使用 scikit-learn 库对乌克兰冲突事件数据集进行多维度分类分析
  • ABP VNext + Apache Flink 实时流计算:打造高可用“交易风控”系统
  • 【深度学习】9. CNN性能提升-轻量化模型专辑:SqueezeNet / MobileNet / ShuffleNet / EfficientNet
  • 汽车电子/电气(E/E)架构将朝着区域(分区)式架构方向发展
  • Filebeat es 同步服务器日志到es
  • C++ STL 容器:List 深度解析与实践指南
  • Linux编辑器——vim的使用
  • 文件上传白名单绕过(图片马 - 图片二次渲染绕过)
  • React从基础入门到高级实战:React 核心技术 - React 与 TypeScript:构建类型安全的应用
  • 第十章:构建之巅 · 打包与部署的终极试炼
  • uniapp-商城-72-shop(5-商品列表,步进器添加商品到的购物车实现)
  • Unsupervised Learning-Word Embedding
  • 如何提高CAD作图设计效率,技术分享
  • 每日算法 -【Swift 算法】实现回文数判断!
  • stm32f系列工程切换到H系列
  • 电芯单节精密焊接机:以先进功能与特点赋能电池制造科技升级
  • 传统数据表设计与Prompt驱动设计的范式对比:以NBA投篮数据表为例
  • PHPStudy 一键式网站搭建工具的下载使用
  • EfficientLLM: Efficiency in Large Language Models 高效大模型
  • AppArmor(Application Armor)是 Linux 内核的一个安全模块
  • 比亚迪“双剑”电池获中汽中心权威认证,堪称“移动安全堡垒”。