尝试 return 向量中的值时出现错误 "the trait Sized is not implemented"
Getting the error "the trait Sized is not implemented" when trying to return a value from a vector
我正在尝试 return 向量的值:
fn merge<'a>(left: &'a [i32], right: &'a [i32]) -> [i32] {
let mut merged: Vec<i32> = Vec::new();
// push elements to merged
*merged
}
我收到错误消息:
error[E0277]: the size for values of type `[i32]` cannot be known at compilation time
--> src/lib.rs:1:52
|
1 | fn merge<'a>(left: &'a [i32], right: &'a [i32]) -> [i32] {
| ^^^^^ doesn't have a size known at compile-time
|
= help: the trait `std::marker::Sized` is not implemented for `[i32]`
= note: to learn more, visit <https://doc.rust-lang.org/book/ch19-04-advanced-types.html#dynamically-sized-types-and-the-sized-trait>
= note: the return type of a function must have a statically known size
我不知道如何解决这个问题。
编译器告诉你不可能 return a [T]
.
Rust 拥有向量 (Vec<T>
)、切片 (&[T]
) 和固定大小的数组 ([T; N]
,其中 N
是一个非负整数,例如6
).
切片由指向数据的指针和长度组成。这就是您的 left
和 right
值。但是,切片中 没有 指定的是谁最终 拥有数据 。切片只是从其他东西借用数据。您可以将 &
视为数据被借用的信号。
A Vec
是一个拥有数据的东西,可以让其他东西通过切片借用它。对于您的问题,您需要分配一些内存来存储这些值,Vec
会为您完成。然后,您可以 return 整个 Vec
,将所有权转让给调用者。
具体的错误消息意味着编译器不知道要为类型 [i32]
分配多少 space,因为它永远不会直接分配。对于 Rust 中的其他内容,您会看到此错误,通常是当您尝试取消引用 trait 对象 时,但这与此处的情况截然不同。
这是您最可能需要的修复方法:
fn merge(left: &[i32], right: &[i32]) -> Vec<i32> {
let mut merged = Vec::new();
// push elements to merged
merged
}
此外,您不需要在此处指定生命周期,我删除了您 merged
声明中的冗余类型注释。
另请参阅:
- Is there any way to return a reference to a variable created in a function?
- Why is `let ref a: Trait = Struct` forbidden?
我正在尝试 return 向量的值:
fn merge<'a>(left: &'a [i32], right: &'a [i32]) -> [i32] {
let mut merged: Vec<i32> = Vec::new();
// push elements to merged
*merged
}
我收到错误消息:
error[E0277]: the size for values of type `[i32]` cannot be known at compilation time
--> src/lib.rs:1:52
|
1 | fn merge<'a>(left: &'a [i32], right: &'a [i32]) -> [i32] {
| ^^^^^ doesn't have a size known at compile-time
|
= help: the trait `std::marker::Sized` is not implemented for `[i32]`
= note: to learn more, visit <https://doc.rust-lang.org/book/ch19-04-advanced-types.html#dynamically-sized-types-and-the-sized-trait>
= note: the return type of a function must have a statically known size
我不知道如何解决这个问题。
编译器告诉你不可能 return a [T]
.
Rust 拥有向量 (Vec<T>
)、切片 (&[T]
) 和固定大小的数组 ([T; N]
,其中 N
是一个非负整数,例如6
).
切片由指向数据的指针和长度组成。这就是您的 left
和 right
值。但是,切片中 没有 指定的是谁最终 拥有数据 。切片只是从其他东西借用数据。您可以将 &
视为数据被借用的信号。
A Vec
是一个拥有数据的东西,可以让其他东西通过切片借用它。对于您的问题,您需要分配一些内存来存储这些值,Vec
会为您完成。然后,您可以 return 整个 Vec
,将所有权转让给调用者。
具体的错误消息意味着编译器不知道要为类型 [i32]
分配多少 space,因为它永远不会直接分配。对于 Rust 中的其他内容,您会看到此错误,通常是当您尝试取消引用 trait 对象 时,但这与此处的情况截然不同。
这是您最可能需要的修复方法:
fn merge(left: &[i32], right: &[i32]) -> Vec<i32> {
let mut merged = Vec::new();
// push elements to merged
merged
}
此外,您不需要在此处指定生命周期,我删除了您 merged
声明中的冗余类型注释。
另请参阅:
- Is there any way to return a reference to a variable created in a function?
- Why is `let ref a: Trait = Struct` forbidden?