Rust中的函数向量

5

我目前正在学习Rust,但在创建一个简单的观察者来存储任意类型的回调时,我遇到了生命周期的困难。

我从一个基本结构体开始:

struct Signal<T> {
    slots: Vec<|T|>
}

这让我得到了最初的生命周期错误。

signal_test.rs:7:16: 7:19 error: explicit lifetime bound required
signal_test.rs:7     slots: Vec<|T|>
                            ^~~
error: aborting due to previous error

接下来我尝试添加一些生命周期限定符。

struct Signal<'r, T> {
    slots: Vec<'r |T|>
}

这给我带来了一些新的错误。

signal_test.rs:7:12: 7:23 error: wrong number of lifetime parameters: expected 0, found 1 [E0107]
signal_test.rs:7     slots: Vec<'r |T|>
                        ^~~~~~~~~~~
signal_test.rs:7:19: 7:22 error: explicit lifetime bound required
signal_test.rs:7     slots: Vec<'r |T|>

我没有找到足够的Rust生命周期文档,以提示我需要做什么来解决这个问题。这可能只是在Rust中不使用好的模式。希望能得到一些帮助和评论。

1个回答

4

尝试使用以下内容:

struct Signal<'r, T> {
    slots: Vec<|T|: 'r>
}

嘿,那个起作用了!你介意解释一下语法中的'r>部分吗?我看到的每个例子都是在类型之前放置生命周期说明符。 - Eric Y
1
@EricY,这就是闭包生命周期指定的方式。这是一个特殊情况。另一个是trait对象的生命周期边界,看起来像这样:Box<Trait+'a>。你只需要习惯它 :) - Vladimir Matveev
2
@EricY,目前的闭包将被取消,以支持未来最近的非装箱闭包,因此这部分语法可能会完全消失。 - Vladimir Matveev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接