我试图使用以下代码返回向量的值.我收到错误消息.
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声明中删除了冗余类型注释.