【发布时间】:2020-10-14 21:44:17
【问题描述】:
它们是一样的吗?有时我可以看到文档使用它们就好像它们是相等的。
【问题讨论】:
它们是一样的吗?有时我可以看到文档使用它们就好像它们是相等的。
【问题讨论】:
Option 类型定义为:
enum Option<T> {
None,
Some(T),
}
这意味着Option 类型可以具有None 或Some 值。
另见:
【讨论】:
match {} 它,并且由于 match 表达式必须是详尽无遗的,因此您必须明确处理 None 分支。
Some,那么说它返回 Option 并没有错,因为 Some 是 Option。
Option<...> 类型的值。但是这种类型过于宽泛(它是由迭代器特性所要求的),因此您所指的部分会告知读者:对于某些blah,返回值始终是值Some(blah),而不是None。这就像说“这个函数总是返回 0”。 0 不是类型,它是一个值,但该语句仍然有意义。
不,它们不一样,将它们视为相同的文档要么是错误的,要么是您的误解。 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");
}
}
【讨论】: