我想了解HashMap如何在Rust中工作,并且我已经提出了这个例子。提取Rust中的字符串和HashMaps
use std::collections::HashMap;
fn main() {
let mut roman2number: HashMap<&'static str, i32> = HashMap::new();
roman2number.insert("X", 10);
roman2number.insert("I", 1);
let roman_num = "XXI".to_string();
let r0 = roman_num.chars().take(1).collect::<String>();
let r1: &str = &r0.to_string();
println!("{:?}", roman2number.get(r1)); // This works
// println!("{:?}", roman2number.get(&r0.to_string())); // This doesn't
}
当我尝试编译最后一行的代码注释掉,我收到以下错误
error: the trait bound `&str: std::borrow::Borrow<std::string::String>` is not satisfied [E0277]
println!("{:?}", roman2number.get(&r0.to_string()));
^~~
note: in this expansion of format_args!
note: in this expansion of print! (defined in <std macros>)
note: in this expansion of println! (defined in <std macros>)
help: run `rustc --explain E0277` to see a detailed explanation
的docs的特质实施部分提供为fn deref(&self) -> &str
那么,什么是解引用在这里发生?
我认为这是错误的(任何人创作'HashMap :: get')在这里使用'借用'特征。基本上,泛型边界表示:如果键类型可以作为该类型借用,则可以将引用传递给“get”。它实际上应该是:只要该类型对于键类型是可强制的,就可以将任何类型传递给'get'。但是,我们无法解决这个问题: –