rust 如何实现闭包 Vec?

2020-05-19 21:30:23 +08:00
 gramyang
函数指针 Vec 是可以实现的,但是不知道如何实现闭包 Vec 。

type Bibao = dyn Fn(String)->String + 'static;

pub fn close_test4(){
let a = "456";
let b1: Bibao = move |mut s:String|{
s.push_str(a);
s
};
let mut v = Vec::new();
op1(b1,&v);
v.get(0)(String::from("123"));
}

fn op1<T:Fn(String) ->String>(t:T,mut v:&Vec<T>){
v.push(t);
}

报错:expected trait object `dyn std::ops::Fn`, found closure

求大佬指点。
2684 次点击
所在节点    Rust
4 条回复
sosilver
2020-05-19 22:32:07 +08:00
用 Box<dyn T>
gwy15
2020-05-19 22:46:04 +08:00
gramyang
2020-05-20 13:29:10 +08:00
@sosilver 可行!
sosilver
2020-05-20 14:38:47 +08:00
@gwy15 这样写只能装一个 closure 。因为不同的 closure 的类型是不同的,Vec<T>的推导类型由第一个放进去的决定,然后就放不进去其它的了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/673374

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX