gpt4 book ai didi

rust - 预期类型 String,当我明确将其设为 String 时发现类型 str

转载 作者:行者123 更新时间:2023-11-29 08:28:50 30 4
gpt4 key购买 nike

use std::collections::{HashMap, HashSet};

type Snapshot = HashMap<String, HashSet<String>>;

fn compare_snapshots(snapshot1: Snapshot, snapshot2: Snapshot, entry1: String, entry2: String) {}

fn main() {
let snapshot1 = HashMap::new();
let snapshot2 = HashMap::new();

let entries1: HashSet<String> = snapshot1.keys().cloned().collect();
let entries2: HashSet<String> = snapshot2.keys().cloned().collect();
let entries: Vec<String> = entries1.union(&entries2).cloned().collect();

for e1 in entries {
for e2 in entries {
if e1 < e2 {
compare_snapshots(snapshot1, snapshot2, *e1.to_string(), *e2.to_string());
}
}
}
}

以及以下错误:

error[E0308]: mismatched types
--> src/main.rs:18:57
|
18 | compare_snapshots(snapshot1, snapshot2, *e1.to_string(), *e2.to_string());
| ^^^^^^^^^^^^^^^ expected struct `std::string::String`, found str
|
= note: expected type `std::string::String`
found type `str`

error[E0308]: mismatched types
--> src/main.rs:18:74
|
18 | compare_snapshots(snapshot1, snapshot2, *e1.to_string(), *e2.to_string());
| ^^^^^^^^^^^^^^^ expected struct `std::string::String`, found str
|
= note: expected type `std::string::String`
found type `str`

既然我明确地给出了 entries 为什么我会得到它们一个Vec<String>类型?

最佳答案

你的情况可以减少到

fn repro(_: String) {}

fn main() {
repro(*"".to_string());
}

出于某种原因,您正在取消引用 String .字符串实现 Deref<Target = str> , 所以你已经明确地尝试制作一个 str .这最终是行不通的,因为 str未调整大小,但您首先遇到类型不匹配。

去掉星号:

fn repro(_: String) {}

fn main() {
repro("".to_string());
}

另见:

关于rust - 预期类型 String,当我明确将其设为 String 时发现类型 str,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56497357/

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