gpt4 book ai didi

rust - 如何创建Vec ,其中T : Into<_> in Rust?

转载 作者:行者123 更新时间:2023-12-03 11:42:00 28 4
gpt4 key购买 nike

这是我的示例代码。我正在尝试将Vec<T>传递给T: Into<_>的函数!

enum Test {
FN(Box<dyn Fn()>),
STR(String),
}

impl<F> From<F> for Test
where F: Fn() + 'static
{
fn from(f: F) -> Self {
Self::FN(Box::new(f))
}
}

impl From<String> for Test {
fn from(s: String) -> Self {
Self::STR(s)
}
}

fn main() {
into(vec![
|| println!("func 1"),
|| println!("func 2"),
String::from("string 1"),
]);
}

fn into<T>(v: Vec<T>)
where T: Into<Test>
{
for test in v {
let test = test.into();
match test {
Test::FN(func) => func(),
Test::STR(s) => println!("{}", s),
}
}
}

错误发生在第二个关闭处:
expected closure, found a different closure

问题在于Into <_>不能调整为动态,因为它是Sized,所以不起作用!

我希望输出:
func 1
func 2
string 1

有任何答案或想法吗?

最佳答案

Rust通常不会自动键入强制。您已经定义了From实现,但是没有什么可以调用它们的。您需要将功能更改为更符合以下情况

fn main() {
into(vec![
Test::from(|| println!("func 1")),
Test::from(|| println!("func 2")),
Test::from(String::from("string 1")),
]);
}

关于rust - 如何创建Vec <T>,其中T : Into<_> in Rust?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60917552/

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