我试图使用以下代码返回向量的值 . 我收到错误消息 .
fn merge<'a>(left: &'a [i32], right: &'a [i32]) -> [i32] {
let mut merged: Vec<i32> = Vec::new();
// push elements to merged
*merged
}
test.rs:19:52:19:57错误:特性core :: marker :: Sized未实现类型[i32] test.rs:19 fn merge <'a>(左:&'a [ i32],右:&'a [i32]) - > [i32] {
我不能为我的生活找到我如何解决这个问题
1 回答
编译器告诉你不可能返回
[T]
.Rust拥有向量(
Vec<T>
),切片(&[T]
)和固定大小的数组([T; n]
,其中n
是非负整数,如6
) .切片由指向数据的指针和长度组成 . 这就是你的
left
和right
值 . 但是,切片中未指定的是谁最终 owns the data . 切片只是从其他东西借用数据 . 您可以将&
视为借用数据的信号 .Vec
是拥有数据的一件事,可以让其他东西通过切片借用它 . 对于您的问题,您需要分配一些内存来存储值,Vec
为您执行此操作 . 然后,您可以返回整个Vec
,将所有权转移给调用者 .特定的错误消息意味着编译器不知道为类型
[i32]
分配了多少空间,因为它通常在您尝试取消引用特征对象时查看Rust中其他内容的此错误,但这与这里的情况 .这是您想要的最可能的解决方案:
此外,您不需要在此处指定生命周期,并且我在
merged
声明中删除了冗余类型注释 .