是否可以将Closure / Function作为结构的成员?

时间:2014-08-07 22:25:05

标签: rust

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能够使用闭包和函数?

1 个答案:

答案 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。在第一种情况下,包含闭包的结构定义,您希望编写类似下面的内容......