【发布时间】:2021-04-02 13:51:34
【问题描述】:
为什么,在下面的代码中,使用数组切片有效,但使用 Vec 的切片无效?
use rand::{rngs::adapter::ReadRng, RngCore};
use std::io::Read;
struct MyRng {
rng: Box<dyn RngCore>,
}
pub fn main() {
// Version 1: error
//
let data = Vec::<u8>::new();
let data_slice = data.as_slice();
// Version 2: works
//
// let data_slice = &[0_u8][..];
// Version 3: error (!?!)
//
// let data = [0_u8];
// let data_slice = &data[..];
let read = Box::new(data_slice) as Box<dyn Read>;
let rng = Box::new(ReadRng::new(read));
// With this commented out, all versions work.
MyRng { rng };
}
有几件事让我感到困惑:
- 如果这三种方法都在同一个范围内,有什么区别?
- 错误提示
data在借用时被删除,但指向范围的末尾 - 到那时不是所有内容都被删除了吗? - 为什么如果我删除
MyRng实例化,一切正常?
【问题讨论】:
标签: vector rust slice lifetime borrow-checker