Rust 中的 Some 和 Option 有什么区别?

Jer*_*oen 5 types optional rust

他们是一样的吗?我有时可以看到文档使用它们,就好像它们是平等的一样。

A.B*_*.B. 7

Option类型定义为:

enum Option<T> {
    None,
    Some(T),
}
Run Code Online (Sandbox Code Playgroud)

这意味着该Option类型可以有一个None或一个Some值。

也可以看看:

  • 添加到此;Option 类型的要点是表示可空 (None) 值,而不在语言中包含空指针的概念。使用枚举意味着您必须“匹配 {}”,并且由于“匹配”表达式必须是详尽无遗的,因此您必须显式处理“无”分支。 (4认同)
  • @JeroenBollen 它的返回值始终是“Option&lt;...&gt;”类型的值。但这种类型过于宽泛(它是由迭代器特征强制执行的),因此您引用的部分会告知读者:对于某些“blah”,返回值始终是“Some(blah)”值,而不是“None”。这就像说“这个函数总是返回 0”。0 不是类型,而是值,但该语句仍然有意义。 (2认同)
  • @Jeroen Bollen:说方法总是返回某个值并没有不正确。 (2认同)

小智 5

不,它们不相同,并且将它们视为相同的文档要么是错误的,要么是您的误解。Option是一种类型(更准确地说,是泛型类型构造函数Option<i32>是一种类型,因此也是Option<String>)。Some是一个构造函数。除了充当函数之外fn Some<T>(T x) -> Option<T>,它还用于模式匹配:

let mut opt: Option<i32>; // type
opt = Some(1); // constructor
opt = None; // other constructor
match opt {
    Some(x) => {
        // pattern
        println!("Got {}", x);
    }
    None => {
        // other pattern
        println!("Got nothing");
    }
}
Run Code Online (Sandbox Code Playgroud)