lilipo的编码小站

Option常用方法整理

发表于 2026-04-02

Option常用方法整理

一、转成另一个Option

1. “进一步处理”系列

| 函数名 | 是否mut | 参数 | 说明 | | ------------ | ------------ | ------------ | | filter | 否 | 函数 | 参数是一个函数。通过参数函数的返回bool值,判断是否留当前Some值 | | flatten | 否 | - | 从 Option<Option> 转换为 Option,即:删除一层嵌套 | | map | 否 | 函数 | 参数是一个函数。会把Some包裹的值或者None传为参数函数。函数返回的新类型,将作来map返回的Option包裹的类型。 | | replace | | 值 | 用Some包裹参数作为新值,返回的是旧值。 | | take | | - | 把原数据的Some中的值拿走返回,在原位置留下None值。 |

2. 转换系列

| 函数名 | 是否mut | 参数 | 说明 | | ------------ | ------------ | | as_deref | 否 | - | 从 Option (或 &Option) 转换为 Option<&T::Target>。 | | as_deref_mut | | - | 从 Option (或 &mut Option) 转换为 Option<&mut T::Target>。 | | as_ref | 否 | - | 从 &Option 转换为 Option<&T>。 | | as_mut | | - | 从 &mut Option 转换为 Option<&mut T>。 |

3. 逻辑组合器(逻辑运算)系列

| 函数名 | 是否mut | 参数 | 说明 | | ------------ | ------------ | | and | 否 | Option | 如果 self 为 None,则返回 None; 否则,返回 optb。 | | and_then | 否 | 函数 | 同上,把optb替换成了函数 | | or | 否 | Option | 如果 self 为 Some,则返回 self,否则返回 optb。 | | or_else | 否 | 函数 | 同上,把optb替换成了函数 | | xor | 否 | Option | 如果 self,optb 之一恰好是 Some,则返回 Some,否则返回 None。 |

4. 克隆与复制

| 函数名 | 是否mut | 参数 | 说明 | | ------------ | ------------ | | cloned | 否 | - | 可能更重、允许非 Copy 类型 | | copied | 否 | - | 轻量、按位复制。优先选择 |


二、转成Result

| 函数名 | 是否mut | 参数 | 说明 | | ------------ | ------------ | | ok_or | 否 | Err | 参数是Err。将 Some(v) 映射到 Ok(v),将 None 映射到 Err(err) | | ok_or_else | 否 | 函数 | 参数是函数。功能同上,用参数函数的返回值计算出Err | | transpose | 否 | - | 从Option转为Result


三、返回具体的值

1. 返回包含的 Some 值

| 函数名 | 是否mut | 参数 | 说明 | | ------------ | ------------ | | expect | 否 | 值 | 当值为None时,会产生panic | | get_or_insert | | 值 | 当为None时,用Some包裹参数值,并更新原来的值。 | | get_or_insert_default | | - | 同上,只不过用的是该类型的默认值代替了参数值。 | | get_or_insert_with | | 函数 | 同上,用参数函数返回的值代替了参数值。 | | insert | | 值 | 用Some包裹参数值,并更新原来的值。如原来有值,丢弃旧值。 | | unwrap | 否 | - | 当值为None时,会产生panic | | unwrap_or | 否 | 值 | 返回包含的 Some 值或提供的默认值。因为有了默认值,所以不会产生panic | | unwrap_or_else | 否 | 函数 | 同上,只是把默认值替换成从函数中返回 | | unwrap_or_default | 否 | - | 同上,只是把默认值替换成该类型的默认值 | | unwrap_unchecked | 否 | - | unsafe方法,当有Some值时返回,没有是未知的行为。 |

2. 使用 Some 值计算后的新值

| 函数名 | 是否mut | 参数 | 说明 | | ------------ | ------------ | | map_or | 否 | 值,函数 | 参数有两个,第一个是默认值,当None时用;第二个是函数,当Some时用。 | | map_or_else | 否 | 函数,函数 | 同上,用一个返回默认值的函数替换了直接给的默认值。 |


四、简单判断

| 函数名 | 是否mut | 参数 | 说明 | | ------------ | ------------ | | is_none | 否 | - | 如果是 None 值,则返回 true | | is_some | 否 | - | 如果是 Some 值,则返回 true | | is_some_and | 否 | 函数 | 如果是 Some 值,且Some中的值满足参数函数的判断时,返回 true |


五、返回迭代器

| 函数名 | 是否mut | 参数 | 说明 | | ------------ | ------------ | | iter | 否 | - | 返回可能包含的值的迭代器 | | iter_mut | | - | 功能同上,只不过是可变迭代器 |


六、压缩与解压缩

| 函数名 | 是否mut | 参数 | 说明 | | ------------ | ------------ | | zip | 否 | Option | 如果 self 是 Some(s),而 other 是 Some(o),则此方法返回 Some((s, o))。否则,返回 None | | unzip | 否 | - | 如果 self 是 Some((a, b)),则此方法返回 (Some(a), Some(b))。否则,返回 (None, None)。 |

← 返回首页