在尝试从向量中返回值时,获取错误“错误:特征`core :: marker :: Sized`未实现”

时间:2015-01-27 16:41:52

标签: rust

我试图使用以下代码返回向量的值。我收到错误消息。

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] {

我不能为我的生活找到我如何解决这个问题

1 个答案:

答案 0 :(得分:11)

编译器告诉您无法返回[T]

Rust拥有向量(Vec<T>),切片(&[T])和固定大小的数组([T; n],其中n是非负整数,如{{ 1}})。

切片由指向数据的指针和长度组成。这是您的6left值。但是,切片中指定的不是是谁最终拥有数据。切片只是从其他东西借用数据。您可以将right视为借用数据的信号。

&是拥有数据的一件事,可以让其他东西通过切片借用它。对于您的问题,您需要分配一些内存来存储值,Vec为您执行此操作。然后,您可以返回整个Vec,将所有权转移给来电者。

特定的错误消息意味着编译器不知道为类型Vec分配多少空间,因为它永远不会直接分配。你会看到Rust中其他东西的这个错误,通常是当你试图取消引用一个特征对象时,但这与这里的情况截然不同。

这是您最想要的解决方案:

[i32]

此外,您不需要在此处指定生命周期,并且我在fn merge(left: &[i32], right: &[i32]) -> Vec<i32> { let mut merged = Vec::new(); // push elements to merged merged } 声明中删除了冗余类型注释。