为什么Rust有String和str?String和之间有什么区别str?什么时候使用String而不是str反之亦然?其中一个被弃用了吗?
我试图使用以下代码返回向量的值.我收到错误消息.
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] {
我不能为我的生活找到我如何解决这个问题
我明白为什么它们必须具有恒定的大小,但我不明白为什么必须在编译时知道该大小。即使 C 也允许在堆栈上使用可变长度数组。这个限制对 Rust 有什么帮助?
我正在阅读《Rust 编程语言》。文档将 a 定义String为“可增长”:
UTF-8 编码的可增长字符串。
我发现可增长与可变不同,但它们并没有真正解释什么使类型“可增长”。
鉴于这种let mut guess = String::new(),
mut改变可增长的字符串?我对 Rust 的学习让我了解了动态大小类型 (DST),并且我知道这些类型的大小在编译时无法得知。例如str。
我现在的问题是,我说 DST 永远不会存在于堆栈上,它们只存在于堆上,这样说对吗?
另外,另一方面,说大小类型可以存在于堆栈中是否正确:
(eg. let x:u32 = 10)
但也可以存在于堆上,例如通过使用 Box
(eg let x: Box<u32> = Box::new(10))
上述这些说法是否正确?