Rust中Some和Option有什么区别?

9
他们是一样的吗?我有时可以看到文档将它们用作相等的方式。
2个回答

10
不,它们不一样,把它们看做是相同的文档要么是错的,要么是你理解上的误解。 "Option" 是一个类型(更准确地说,是一个“通用类型构造器”;"Option" 是一种类型,"Option" 也是一种类型)。 "Some" 是一个构造函数。除了作为一个函数 "fn Some(T x) -> Option" 外,它还用于模式匹配:
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");
    }
}

7

1
这是否意味着Rust的某些文档是错误的?例如:http://static.rust-lang.org/doc/0.10/std/io/struct.IncomingConnections.html - 其中说next方法总是返回Some,而实际上它返回的是一个Option。 - Jeroen
5
此外,Option 类型的目的是表示可为空(None)的值,而不包括语言中的空指针概念。使用枚举意味着您必须 match {} 它,由于 match 表达式必须是全面的,因此您必须显式处理 None 分支。 - dwerner
1
@JeroenBollen - 如果它总是返回Some,那么说它返回一个Option并不是错误的,因为Some就是一个Option - Lee
2
@JeroenBollen 它的返回值始终是一个类型为Option <...>的值。但这个类型过于宽泛(它是迭代器特性所要求的),因此你所提到的部分告诉读者: 返回值始终是某个 blahSome(blah) 值,从不是 None。就像说“这个函数总是返回 0”。0 不是一个类型,它是一个值,但这个语句仍然有意义。 - user395760
2
@Jeroen Bollen:说一个方法总是返回某个值并不是不正确的。 - A.B.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接