什么是 Rust 中的 Some 和 None?为新手解释 Option<T>
你好!我刚从 Python 和 JavaScript 开始学习 Rust,遇到了一个难以理解的构造。在别人的代码中,我经常看到这样的东西:
```rust
fn find_user(id: u32) -> Option {
if id == 42 {
Some(String::from("Alice"))
} else {
None
}
}
```
我完全不明白 `Some` 和 `None` 是什么。为什么不能直接返回一个字符串或 `null`?在 Python 中,我会这样写:
```python
def find_user(id):
if id == 42:
return "Alice"
else:
return None
```
而且这样是可行的。但在 Rust 中,我必须写一些 `Option` 并把结果包装在 `Some` 里。更有甚者,我尝试使用这个函数的结果——却得到了编译错误。这是我的代码:
```rust
let user = find_user(42);
println!("User: {}", user); // 错误!
```
编译器报错说 `Option` 没有实现 `Display` trait。我该如何正确使用它?`Some` 和 `None` 到底是什么意思?为什么 Rust 不能像...