)>, } impl Shell { fn f-6ren">
gpt4 book ai didi

rust - 为什么我在 for 循环中的元组上出现 "value must be known"错误?

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

struct Plugin;
struct Blueprint<'a>(&'a ());

struct Shell<'a> {
plugins: Vec<(&'a Plugin, Vec<Blueprint<'a>>)>,
}

impl<'a> Shell<'a> {
fn find_blueprint(&self, name: &str) -> Option<Blueprint> {
for plugin_blueprints in self.plugins.as_ref() {
for blueprint in plugin_blueprints.1 {
if blueprint.name.to_string() == name {
return Some(blueprint);
}
}
}
None
}
}

fn main() {}

生成此错误:

error: the type of this value must be known in this context
--> src/main.rs:11:30
|
11 | for blueprint in plugin_blueprints.1 {
| ^^^^^^^^^^^^^^^^^^^

这让我很困惑,因为 plugin_blueprints似乎明确属于 (&'a Plugin, Vec<Blueprint<'a>>) 类型.我不确定我将使用什么语法(如果有的话)来指定 for 循环中的类型。涡轮鱼::<似乎不起作用。

最佳答案

因为您正在使用 as_ref,它比您想要的更通用。 T 的值无法推断:

pub trait AsRef<T>
where T: ?Sized
{
fn as_ref(&self) -> &T;
}

迭代这个的惯用方法是

for plugin_blueprints in &self.plugins {}

非常讨厌的做法是在 trait 上使用 turbofish,使用消除歧义的函数调用语法:

for plugin_blueprints in AsRef::<[(&'a Plugin, Vec<Blueprint<'a>>)]>::as_ref(&self.plugins) {

关于rust - 为什么我在 for 循环中的元组上出现 "value must be known"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43354158/

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