1
我遍歷了一個HashMap
並通過模式匹配在一些本地變量中的值。爲什麼迭代HashMap <&str,&str>會產生一個&& str?
Delegater
fn lyrics_no_bottles(song_template:&mut String){
let mut template_partials = HashMap::new();
template_partials.insert("start", "No more bottles");
template_partials.insert("repeat", "no more bottles");
template_partials.insert("remaining", "99 bottles");
template_partials.insert("message", "Go to the store and buy some more");
resolve_template(song_template, template_partials);
}
叫
fn resolve_template(song_template:&mut String, partials: HashMap<&str, &str>){
let start:&str;
let repeat:&str;
let remaining:&str;
let message:&str;
for key in partials.keys(){
match key {
"start" => start = partials.get(key),
"repeat" => repeat = partials.get(key),
"remaining" => remaining = partials.get(key),
"message" => message = partials.get(key)
}
}
*song_template = song_template.replace("%1", start);
*song_template = song_template.replace("%2", repeat);
*song_template = song_template.replace("%3", message);
*song_template = song_template.replace("%4", remaining);
}
錯誤輸出
lib.rs:51:5: 58:6 error: type mismatch resolving `<std::collections::hash::map::Keys<'_, &str, &str> as core::iter::Iterator>::Item == &str`:
expected &-ptr,
found str [E0271]
lib.rs:51 for key in partials.keys(){
lib.rs:52 match key {
lib.rs:53 "start" => start = partials.get(key),
lib.rs:54 "repeat" => repeat = partials.get(key),
lib.rs:55 "remaining" => remaining = partials.get(key),
lib.rs:56 "message" => message = partials.get(key)
...
lib.rs:51:5: 58:6 help: run `rustc --explain E0271` to see a detailed explanation
lib.rs:53:32: 53:49 error: mismatched types:
expected `&str`,
found `core::option::Option<&&str>`
(expected &-ptr,
found enum `core::option::Option`) [E0308]
lib.rs:53 "start" => start = partials.get(key),
我不underst以及爲什麼當我聲明參數爲HashMap<&str,&str>
時編譯器認爲有&&str
。
所以我也有破壞了'選項<&&str>'之前我甚至可以deref'&& str' ...我會嘗試'如果讓一些(x)' – xetra11
正確。也許我應該在你的答案中給你一個解決實際問題的方法。我現在補充一下。 –
謝謝......如果再讓我們繼續使用 – xetra11