我使用 Vec::get
遇到了一些我不理解的输出。这是代码:
fn main() {
let command = [('G', 'H'), ('H', '5')];
for i in 0..3 {
print!(" {} ", i);
println!("{:?}", command.get(i));
}
}
输出是
0 Some(('G', 'H'))
1 Some(('H', '5'))
2 None
我以前接触过 Haskell,我的意思是看一个教程网站 10 分钟然后又回到 C++,但我记得读过一些关于 Some
和 None
用于 Haskell。我很惊讶在 Rust 中看到这个。有人可以解释为什么 .get()
返回 Some
或 None
吗?
最佳答案
get
的签名(对于切片,不是 Vec
,因为您使用的是数组/切片)是
fn get(&self, index: usize) -> Option<&T>
也就是说,它返回一个 Option
,这是一个定义如下的枚举
pub enum Option<T> {
None,
Some(T),
}
None
和 Some
是枚举的变体,即类型为 Option<T>
的值可以是 None
, 或者它可以是 Some
包含 T
类型的值.您可以创建 Option
枚举也使用变体:
let foo = Some(42);
let bar = None;
这个和核心一样data Maybe a = Nothing | Just a
输入 Haskell;两者都代表一个可选值,它要么存在(Some
/Just
),要么不存在(None
/Nothing
)。
当失败的原因只有一种可能性时,这些类型通常用于表示失败,例如 .get
使用 Option
提供类型安全的边界检查数组访问:它返回 None
(即没有数据)当索引超出范围时,否则返回 Some
包含请求的指针。
另见:
关于rust - 什么是有和无?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24771655/