如何循环传递接收者参考?

时间:2019-08-16 18:00:36

标签: rust

我的问题是关于循环引用。它与使用交叉光束通道和Select有关,但很可能更普遍地适用。

我想根据需要创建任意数量的新after通道,并将它们传递给横梁Select。现在,我的问题是这个select.recv()引用了一个频道,而不是移动该频道。

这是我要尝试的工作的简化方法(我希望可以稍后处理的Select处对此有所帮助的部分)。

fn setup_channels(duration_rx: Receiver<Duration>) {
    let mut select = Select::new();
    thread::spawn(move || loop {
        let duration = duration_rx.recv().unwrap();
        let chan = after(duration);
        select.recv(&chan);
    });
}

error[E0597]: `chan` does not live long enough

好的,很公平。因此,我认为此参考资料必须来自 某处。也许我可以将实际频道值放在Vec中?

fn setup_channels(input_rx: Receiver<Duration>) {
    let mut select = Select::new();
    let mut channels = vec![];
    thread::spawn(move || loop {
        let duration = input_rx.recv().unwrap();
        let chan = after(duration);
        channels.push(chan);
        let last_chan = &channels[channels.len()-1];
        select.recv(last_chan);
    });
}

否:

error[E0502]: cannot borrow `channels` as mutable because it is also borrowed as immutable

因此,经过一段时间后,我看不到如何获得 select.recv()接受频道参考。

我该如何解决这个问题?

0 个答案:

没有答案