std1.97.1——Option模块总览 目录0. 引言1. Option枚举简介2. Option与指针(可空指针)3. 问号运算符?(必用不用代码太繁琐了)4. 内存表示(暂时不知道这部分讲得什么玩意)参考0. 引言OptIon枚举上的方法单独在Option模块细览中。std::option模块总览没有对常用方法进行非常详细的展开。1. Option枚举简介Option类型表示一个可选值每个Option要么是Some并包含一个值要么是None不包含值。Option在Rust代码中很常用有如下用途初始值。对于并非在整个输入范围内都有定义的函数用作返回值。用于报告简单错误的返回值其中出错时返回None。可选的结构体字段。可以被借出或取走的结构体字段。可选的函数参数。可空指针。将事物从复杂情境中交换出来。Option通常与模式匹配配合使用以查询值的存在并采取行动始终处理None的情况。2. Option与指针(可空指针)Rust的指针类型必须始终指向有效的位置不存在空引用。相反Rust有可选指针比如OptionBoxT。fncheck_optional(optional:OptionBoxi32){matchoptional{Some(p)println!(has value {p}),Noneprintln!(has no value),}}fnmain(){letoptionalNone;check_optional(optional);letoptionalSome(Box::new(9000));check_optional(optional);}3. 问号运算符?(必用不用代码太繁琐了)与Result类型类似当编写调用许多返回Option类型的函数的代码时处理Some/None可能很繁琐。问号运算符?隐藏了一些将值向上传播到调用栈的代码。它能将下面这段代码fnadd_last_numbers(stack:mutVeci32)-Optioni32{letastack.pop();letbstack.pop();match(a,b){(Some(x),Some(y))Some(xy),_None,}}替换为fnadd_last_numbers(stack:mutVeci32)-Optioni32{Some(stack.pop()?stack.pop()?)}在表达式末尾加上?将得到Some解包后的值除非结果是None此时None会从外层函数提前返回。?可以用在返回Option的函数中因为它提供了None的提前返回。4. 内存表示(暂时不知道这部分讲得什么玩意)Rust保证对以下类型T进行优化使得OptionT与T具有相同的大小、对齐和函数调用ABI。因此当T是这些类型之一时将类型T的值t转换为类型OptionT(产生值Some(T))以及将类型OptionT的值Some(t)转换为类型T(产生值t)没有任何运行开销。在以下某些情况中Rust进一步保证transmute::_, OptionT([pu8; sizeof::T()])无开销并产生Option::T::Nonetransmute::_, [u8; sizeof::T()](Option::T::None)无开销并产生[0u8; size_of::T()]这些情况由第二列标识(Sized指的是类型的大小在编译时已知)T在[0u8; size_of::T()]和Option::T::None之间转换是否无开销BoxU, Global(默认Box)U: SizedUU: Sizedmut UU: Sized所有函数指针fn变体始终num::NonZero*始终ptr::NonNullUU: Sized#[repr(transparent)]标记的、且内部只包含一个此列表中类型的结构体当内部类型满足条件时在某些条件下上述类型T在包裹在Result中时也会进行优化上面这种优化称为空指针优化NPO。对于上面的情况可以进一步保证从T的所有有效值transmute到OptionT以及从Some::T(_)transmute到T(但将None::T转换到T是未定义行为参考1、Rust std::option

相关新闻

最新新闻

IT 领导者使用可观测性监控 AI 应用的 7 条经验

IT 领导者使用可观测性监控 AI 应用的 7 条经验

作者:来自 Elastic Brad Quarry 通过 LLM 可观测性证明 AI 价值需要什么 在六个月的时间里,Elastic IT 团队运行的内部 AI 应用为业务节省了价值 250 万美元的运营时间。 一个对话式支持助手让我们从零数字化解决率 —— 任何复杂问题都会变成一个工单 —…

2026/8/22 10:59:33
机器人编制:从单机智能到集群管理的技术架构与落地实践

机器人编制:从单机智能到集群管理的技术架构与落地实践

这类话题最值得先看的不是概念本身,而是它背后指向的、正在真实发生的技术与管理变革。当“机器人”和“编制”这两个词被放在一起时,它解决的远不止是机器人的归属问题,而是如何将日益自主、智能的实体,纳入到现有的人类组织、责…

2026/8/22 10:59:33
Suno AI音乐生成工具重大升级:移动端与播放列表功能实战指南

Suno AI音乐生成工具重大升级:移动端与播放列表功能实战指南

如果你最近在关注 AI 音乐生成,那么 Suno 这个名字一定不会陌生。这个能根据简单文本提示生成完整歌曲的 AI 工具,已经让无数音乐爱好者和内容创作者为之兴奋。但过去,Suno 的使用体验存在一个明显的“断层”:你可以在网页端创作出…

2026/8/22 10:59:33
Ollama本地搭建Deepseek

Ollama本地搭建Deepseek

Ollama本地搭建LLM: Deepseek一、AI领域分层介绍和主流的大模型1.第一层:基础学科与总称(最底层)2.第二层:当前的范式革命(生成式浪潮)3.第三层:当下最火的具体模型形态(LLM与多模态…

2026/8/22 10:59:33
Java高级开发面试全解析:JVM调优与分布式系统设计

Java高级开发面试全解析:JVM调优与分布式系统设计

1. 面试背景与候选人简介谢飞机(化名),28岁,5年Java后端开发经验,目前就职于某中型互联网公司,负责电商平台核心交易系统开发。本次面试的是国内某头部互联网公司的P7级高级Java开发岗位,主要方…

2026/8/22 10:59:33
【每日搜索】2026.8.20

【每日搜索】2026.8.20

1. Kafka 和 RabbitMQ 生产者发送确认对比1、Kafka 生产者&#xff1a;同步发送 & 异步发送producer.send(record) 返回 Future 对象异步发送java运行Future<RecordMetadata> future producer.send(record);send 直接返回 Future&#xff0c;主线程不用阻塞等待 bro…

2026/8/22 10:54:33