Rust 学习笔记:关于枚举与模式匹配的练习题

Rust 学习笔记:关于枚举与模式匹配的练习题

  • Rust 学习笔记:关于枚举与模式匹配的练习题
    • 以下程序能否通过编译?若能,输出是什么?
    • 考虑这两种表示结果类型的方式,若计算成功,则包含值 T;若计算失败,则包含错误 E。在 Rust 中,枚举 Result2 被认为比结构体 Result1 更符合习惯。下面哪个说法不是一个合理的原因?
    • 以下程序能否通过编译?若能,输出是什么?
    • 以下哪个选项最能描述这个函数?
    • 以下程序能否通过编译?若能,输出是什么?
    • 两个函数在以下哪种情况下具有相同的行为?
    • 以下函数中使用哪种控制流结构最符合惯用法?
    • 以下函数中使用哪种控制流结构最符合惯用法?

Rust 学习笔记:关于枚举与模式匹配的练习题

参考视频:

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

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

fn foo(x: &i32) {println!("{x}")
}fn main() {let x = null;foo(x);
}

不能编译。

error[E0425]: cannot find value `null` in this scope

考虑这两种表示结果类型的方式,若计算成功,则包含值 T;若计算失败,则包含错误 E。在 Rust 中,枚举 Result2 被认为比结构体 Result1 更符合习惯。下面哪个说法不是一个合理的原因?

struct Result1<T, E> {ok: Option<T>,err: Option<E>,
}enum Result2<T, E> {Ok(T),Err(E),
}

A. 结构体在运行时占用的内存比枚举更多
B. 结构体的构造语法比枚举更冗长
C. 结构体包含的 Option 类型,仅用于包装结构体
D. 结构体的 ok 和 err 都可以为 None,而枚举至少有一个不为 None

答:C。

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

enum Location {Point(i32),Range(i32, i32),
}fn main() {let l: Location = Location::Range(0, 5);let n = match l {Location::Point(_) => -1,Location::Range(_, n) => n,Location::Range(0, _) => 0,_ => -2,};println!("{n}");
}

虽然 match 中的最后两个模式不可能比较得到,但程序可以通过编译。

程序匹配第二个模式,输出 5。

以下哪个选项最能描述这个函数?

impl<T> Option<T> {fn unwrap_or(&self, other: T) -> T {match self {Some(t) => t,None => other,}}
}

A. 返回 self 内部的对象(如果存在),否则返回 other
B. 返回一个包含 self 内部对象的新 option(如果存在),否则返回 other
C. 如果 self 尚未包含值,则插入 other
D. 返回对 self 内部对象的引用(如果存在),否则返回 other

答:A。

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

#[derive(Debug)]
enum Either {Left(usize),Right(String),
}fn main() {let x = Either::Right(String::from("Hello world"));let value = match x {Either::Left(n) => n,Either::Right(s) => s.len(),};println!("{x:?} {value}");
}

不能编译。枚举 x 被部分移动,不能再读取。

两个函数在以下哪种情况下具有相同的行为?

fn decr_twice_v1(n: u32) -> Option<u32> {match n {0 => None,1 => None,n2 => Some(n2 - 2),}
}fn decr_twice_v2(n: u32) -> Option<u32> {if n == 0 {None} else if n == 1 {None} else {Some(n - 2)}
}

A. 对一些输入有效,但不是所有输入
B. 对所有输入有效
C. 对任何输入无效

答:B。

以下函数中使用哪种控制流结构最符合惯用法?

enum Location {Point(i32),Range(i32, i32),
}fn print_range_max(loc: &Location) {// print the second field of Range, if loc is a Range
}

答:if let。

以下函数中使用哪种控制流结构最符合惯用法?

enum Location {Point(i32),Range(i32, i32),
}fn get_start(loc: &Location) {// return the first field of Range or the only field of Point
}

答:match。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/79152.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++负载均衡远程调用学习之QPS性能测试

目录 1.昨日回顾 2.QPS_TEST_PROTOBUF协议的集成 3.QPS_TEST_SERVER端实现 4.QPS_TEST_QPS简单介绍 5.QPS_TEST_QPS客户端工具编写和性能测试 1.昨日回顾 2.QPS_TEST_PROTOBUF协议的集成 ## 14) Reactor框架QPS性能测试 ​ 接下来我们写一个测试用例来测一下我们…

【MySQL数据库】视图

1&#xff0c;视图的基本介绍 视图是一个虚拟表&#xff0c;其内容由查询定义。与真实表一样的是&#xff0c;视图包含带有名称的列和行数据&#xff1b;与真实表不一样的是&#xff0c;视图本身并不在数据库中存储数据。视图的数据变化会影响到基表&#xff0c;基表的数据变化…

Linux系统安装方式+适合初学者的发行版本

Linux系统安装方式适合初学者发行版—目录 一、Linux系统的安装方式1. 物理机直接安装2. 虚拟机安装3. 双系统安装4. Live USB试用5. 云服务器安装 二、适合初学者的Linux发行版1. Ubuntu2. Linux Mint3. Zorin OS4. Pop!_OS5. Elementary OS6. Fedora7. Manjaro 三、选择建议场…

Linux C++ JNI封装、打包成jar包供Java调用详细介绍

在前面 Android专栏 中详细介绍了如何在Android Studio中调用通过jni封装的c库。 在Android使用 opencv c代码&#xff0c;需要准备opencv4android&#xff0c;也就是c的任何代码&#xff0c;是使用Android NDK编译的&#xff0c;相当于在windows/mac上使用Android stdido交叉…

4.1 模块概述

1.Python结构 工程 > 包 > 模块 Python工程: “Python项目中最大的文件夹(本质就是一个文件夹)” --- 左侧的 CODE文件夹 为Python工程 Python包: 本质就是一个文件夹,但是python包中具备具体的标识,如果没有标识则不能导入 --- 左侧的 01.Python基础 文件夹为python包 P…

AJAX 实例

AJAX 实例 引言 Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;是一种在无需重新加载整个页面的情况下&#xff0c;与服务器交换数据并更新部分网页的技术。Ajax通过在后台与服务器交换数据&#xff0c;实现了页面的动态更新&#xff0c;从而提高了用户体验和…

相机的基础架构

&#x1f4f7; 相机相关基础架构学习路径 一、了解手机相机系统架构 Android Camera HAL&#xff08;如果你是做 Android 平台&#xff09; 学习 Camera HAL3 架构&#xff08;基于 camera_device_t, camera3_device_ops 接口&#xff09; 熟悉 CameraService → CameraProvid…

MLX Chat - 基于 Streamlit 的 MLX 前端界面

本文翻译整理自&#xff1a;https://github.com/da-z/mlx-ui 一、关于 MLX Chat 一个基于 Streamlit 的简单 UI/网页前端&#xff0c;用于 MLX mlx-lm 项目。 相关链接资源 github : https://github.com/da-z/mlx-uiMLX 社区模型库&#xff1a;https://huggingface.co/mlx-co…

el-table 自定义列、自定义数据

一、对象数组格式自定义拆分为N列 1-1、数据格式&#xff1a; const arrayList ref([{"RACK_NO": "A-1-001"},{"RACK_NO": "A-1-002"},{ "RACK_NO": "A-1-003"},//省略多个{"RACK_NO": "A-1-100…

JVM 如何使用性能分析工具定位代码中的性能问题?

核心思想&#xff1a; 通过工具观察程序在特定负载下的运行状态&#xff0c;识别消耗资源最多的代码段&#xff08;热点代码&#xff09;、异常的内存分配模式或线程阻塞情况&#xff0c;然后针对性的优化代码。 通用步骤&#xff1a; 确定问题&#xff1a; 首先明确遇到了什…

Python虚假新闻检测识别

程序示例精选 Python虚假新闻检测识别 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《Python虚假新闻检测识别》编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读。 学习与应…

网络原理 - 12(HTTP/HTTPS - 3 - 响应)

目录 认识“状态码”&#xff08;status code&#xff09; 200 OK 404 Not Found 403 Forbidden 405 Method Not Allowed 500 Internal Server Error 504 Gateway Timeout 302 Move temporarily 301 Moved Permanently 418 I am a teaport 状态码小结&#xff1a; …

Spring Boot中集成Guava Cache或者Caffeine

一、在Spring Boot(1.x版本)中集成Guava Cache 注意&#xff1a; Spring Boot 2.x用户&#xff1a;优先使用Caffeine&#xff0c;性能更优且维护活跃。 1. 添加依赖 在pom.xml中添加Guava依赖&#xff1a; <dependency><groupId>com.google.guava</groupId&…

Linux工作台文件操作命令全流程解析

全文目录 1 确认当前工作路径2 导航与目录管理2.1 关键命令2.2 逻辑衔接 3 文件基础操作3.1 创建 → 备份 → 重命名 → 清理3.2 文件查看和编辑3.3 文件链接3.4 文件diff 4 文件权限与所有权管理5 文件打包与归档6 参考文献 写在前面 shell是一种命令解释器&#xff0c;它提供…

LeetCode第183题_从不订购的客户

LeetCode 第183题&#xff1a;从不订购的客户 题目描述 表: Customers ---------------------- | Column Name | Type | ---------------------- | id | int | | name | varchar | ---------------------- id 是该表的主键。 该表包含消费者的 id 和…

c语言的常用关键字

c语言的常用关键字 c语言的关键字表示数据类型的关键字autocharfloatdoubleintlongshortvoidsignedstruct、enum、unionunsigned 表示分支语句的关键字ifelseswitchbreakcasecontinuedefault 表示循环语句的关键字whiledoforgoto 用于修饰变量或函数的关键字constconst修饰变量…

MCU通用输入输出端口(GPIO)设计指南

在嵌入式系统开发中&#xff0c;MCU的GPIO接口是一个基础但非常实用的功能模块。GPIO全称是通用输入输出端口&#xff0c;它让MCU可以灵活地与外部设备进行交互。 GPIO的主要特点包括&#xff1a; 多功能性&#xff1a;每个引脚都可以单独配置为输入或输出 可编程性&#xff…

STM32完整内存地址空间分配详解

在STM32这类基于ARM Cortex-M的32位微控制器中&#xff0c;整个4GB的地址空间(从0x00000000到0xFFFFFFFF)有着非常系统化的分配方案&#xff0c;每个区域都有其特定的用途。下面我将详细介绍这些地址区域的分配及其功能&#xff1a; STM32完整内存地址空间分配详解(0x00000000…

实现水平垂直居中的多种方法

在前端开发中&#xff0c;元素的居中是一个常见但又经常让人头疼的问题。本文将全面总结各种CSS居中方法&#xff0c;特别是如何实现一个div的水平垂直居中。 为什么居中这么重要&#xff1f; 居中布局是现代网页设计中最基础也最重要的布局方式之一。无论是导航菜单、登录框…

如何实现服务的自动扩缩容(Auto Scaling)

在云计算和分布式系统的时代,系统的弹性和适应性已成为企业构建高效IT基础设施的核心需求。自动扩缩容(Auto Scaling)作为一种关键技术,旨在根据实时负载变化动态调整计算资源,以确保系统性能稳定,同时优化资源利用效率。简单来说,自动扩缩容是指系统能够根据预设规则或…