009 Rust死灵书之高阶trait边界
介绍
本系列录制的视频主要放在B站上Rust死灵书学习视频
Rust相关的源码资料在:github.com/anonymousGiga
笔记内容
考虑代码:
struct Closure<F> {
data: (u8, u16),
func: F,
}
impl<F> Closure<F>
where F: Fn(&(u8, u16)) -> &u8,
{
fn call(&self) -> &u8 {
(self.func)(&self.data)
}
}
fn do_it(data: &(u8, u16)) -> &u8 { &data.0 }
fn main() {
let clo = Closure { data: (0, 1), func: do_it };
println!("{}", clo.call());
}
如果要加上生命周期怎么办?如下:
struct Closure<F> {
data: (u8, u16),
func: F,
}
impl<F> Closure<F>
where for<'a> F: Fn(&'a (u8, u16)) -> &'a u8,
{
fn call<'a>(&'a self) -> &'a u8 {
(self.func)(&self.data)
}
}
fn do_it<'b>(data: &'b (u8, u16)) -> &'b u8 { &data.0 }
fn main() {
//'x:
{
let clo = Closure { data: (0, 1), func: do_it };
println!("{}", clo.call());
}
}
本作品采用《CC 协议》,转载必须注明作者和本文链接