为什么Rust有String和str?String和之间有什么区别str?什么时候使用String而不是str反之亦然?其中一个被弃用了吗?
我对Scala很新,并尝试理解可变性Seq.因为它在包中mutable我期望有一种方法允许我们在不复制整个集合的情况下追加元素.
但是没有+=方法mutable.Seq,但是在Buffer.:+并+:复制该集合.
那为什么它是可变的?
答案是什么锈病的`String`之间的区别`str`?描述了如何&str和String相互关系.
令人惊讶的是,a str比固定大小的数组更有限,因为它不能被声明为局部变量.编译
let arr_owned = [0u8; 32];
let arr_slice = &arr_owned;
let str_slice = "apple";
let str_owned = *str_slice;
Run Code Online (Sandbox Code Playgroud)
在Rust 1.32.0中,我明白了
error[E0277]: the size for values of type `str` cannot be known at compilation time
--> src/lib.rs:6:9
Run Code Online (Sandbox Code Playgroud)
这是令人困惑的,因为"apple"编译器可以知道它的大小,它只是不属于str类型的一部分.
是否存在Vec<T>< - > [T; N]和String< - > str所拥有类型之间不对称的语言原因?一个str[N]类型,它是一个简短的[u8; N]只包含可证明有效的UTF-8编码字符串,可以替换str而不会破坏大量现有代码吗?