gpt4 book ai didi

string - 为什么 Option.as_ref() 不取消对 Option<&str> 的引用?

转载 作者:行者123 更新时间:2023-11-29 07:58:44 25 4
gpt4 key购买 nike

我希望这两个代码示例的结果相同:

let maybe_string = Some(String::from("foo"));
let string = if let Some(ref value) = maybe_string { value } else { "none" };
let maybe_string = Some(String::from("foo"));
let string = maybe_string.as_ref().unwrap_or("none");

第二个示例给我一个错误:

error[E0308]: mismatched types
--> src/main.rs:3:50
|
3 | let string = maybe_string.as_ref().unwrap_or("none");
| ^^^^^^ expected struct `std::string::String`, found str
|
= note: expected type `&std::string::String`
found type `&'static str`

最佳答案

因为这就是 Option::as_ref 定义:

impl<T> Option<T> {
fn as_ref(&self) -> Option<&T>
}

既然你有一个 Option<String> ,那么结果类型必须Option<&String> .

相反,您可以添加 String::as_str :

maybe_string.as_ref().map(String::as_str).unwrap_or("none");

或者更短的:

maybe_string.as_ref().map_or("none", String::as_str);

从 Rust 1.40 开始,您还可以使用 Option::as_deref .

maybe_string.as_deref().unwrap_or("none");

另见:

关于string - 为什么 Option<String>.as_ref() 不取消对 Option<&str> 的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44163624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com