我显然(通过这个问题)对拉斯特是个新手.在下面的示例中,编译器要求g(...)
中的两个borrow 超过'static
.我不明白为什么会这样,我怎么才能缩小范围.我实际上不知道这些薄片的生命周期 (尽管我知道内部和外部一样长).我遗漏了什么?我读过《铁 rust 》一书中关于生命的解释,也读过几篇关于生命的帖子,但虽然经常被问到生命的问题,但没有一个讨论真正回答了这一点(或者我看不到匹配).
这里是简化形式的有问题的代码:
pub trait A <X>
where X: Copy
{
fn f(&mut self, x: Box<dyn Iterator<Item=&[X]>>) -> Option<X>;
fn g(&mut self, x: &[&[X]]) -> Option<X> {
self.f(Box::new(x.iter().copied().cycle()))
}
}
Rustc 1.66.0