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

jog*_*eul 8 rust

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

fn merge<'a>(left: &'a [i32], right: &'a [i32]) -> [i32] {
    let mut merged: Vec<i32> = Vec::new();
    // push elements to merged
    *merged
}
Run Code Online (Sandbox Code Playgroud)

test.rs:19:52:19:57错误:core::marker::Sized类型[i32] test.rs:19 fn merge <'a>(左:&'a [i32],右:&'a [i32] ) - > [i32] {

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

She*_*ter 11

编译器告诉你不可能返回一个[T].

Rust拥有vectors(Vec<T>),slices(&[T])和固定大小的数组([T; n]其中n是非负整数6).

切片由指向数据的指针和长度组成.这就是你left和你的right价值所在.但是,切片中指定的是谁最终拥有数据.切片只是从其他东西借用数据.您可以将该信息&视为借用数据的信号.

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

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

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

fn merge(left: &[i32], right: &[i32]) -> Vec<i32> {
    let mut merged = Vec::new();
    // push elements to merged
    merged
}
Run Code Online (Sandbox Code Playgroud)

此外,您不需要在此处指定生命周期,并且我在merged声明中删除了冗余类型注释.