返回HashMap的默认&str [重复]

问题描述 投票:0回答:1

我有一个HashMap<_, String>for,我想获得一个键的相应值或返回一个默认字符串。最明显的方法是使用unwrap_or,但这会因类型错误而失败:

error[E0308]: mismatched types
  --> src/main.rs:11:44
   |
11 |     let val = hashmap.get(key).unwrap_or("default");
   |                                            ^^^^^^^^^ expected struct `std::string::String`, found str
   |
   = note: expected type `&std::string::String`
              found type `&'static str

我可以使用像if let Some(val) = hashmap.get(key) { val } else { "default" }这样的表达式解决这个问题,但我想知道是否有更清洁的方法。

string rust default
1个回答
1
投票

似乎问题是Rust不会在Option<&String>上自动执行Deref强制,因此你必须使用像&str这样的东西明确地转换为Option::map_or

let val = hashmap.get("key").map_or("default", String::as_str);

虽然这是最直接的方法,但在此相关答案中还有其他几种Deref强制替代方法:https://stackoverflow.com/a/31234028/1172350

© www.soinside.com 2019 - 2024. All rights reserved.