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