struct Foo<A,B>{
f: |A| -> B // err: Missing life time specifier
}
impl<A,B> Foo<A,B>{
fn new(f: |A| -> B) -> Foo<A,B>{
Foo {f:f}
}
}
为什么会出现此错误?我也希望Foo能够处理正常的函数和闭包。
我知道过去有一个关闭改革,那么f
的正确签名是什么,以便Foo能够使用闭包和函数?
答案 0 :(得分:3)
如果在结构中放置闭包,则需要明确命名生命周期。
struct Foo<'a,A,B>{
f: |A|:'a -> B
}
impl<'a,A,B> Foo<'a,A,B>{
fn new(f: |A| -> B) -> Foo<A,B>{
Foo {f:f}
}
}
有关这方面的更多信息,请阅读本案例中的this blog post。 以下是博文中的相关部分:
将指定边界的两种情况是(1)将闭包放入结构中,其中必须明确命名所有生命周期,以及(2)指定数据并行API。在第一种情况下,包含闭包的结构定义,您希望编写类似下面的内容......