幸运地是, Rust编译器很友好地告诉了我们问题所在。很明显,这里我们使用了两个不同的类型:std::string::String,简写为String,和&str。但是greet()期望传入一个String, 很显然,我们传给函数的类型是&str。 编译器甚至已经提示我们如何修正这个错误。 把第3行改为let my_name= "Pascal".to_string();即可修正这...
这个字符串切片,即str本身,是不确定大小(unsized)的。 而且,在实际使用中,字符串切片总是以引用的形式出现,也就是它们的类型总是&str而不是str。 上面已经解释了String,&String,和str以及&str的区别,但是我们还没有在最开始的示例中创建过这样的引用,不是吗? 理解字符串字面量(Understanding string literals) ...
当你需要在结构体中使用 &str 时,你就会知道了。 在结构体中存储引用当然很有用,Rust 支持这一点也很好。 但你只有在相当特殊的情况下才会用到它,如果你觉得自己在担心 String vs &str 的问题,那么你现在还不适合担心在结构体中存储 &str 的复杂性。 事实上,有些人对这一规则深信不疑,以至于他们正在开发一...
str切片是借用数据的一部分,因此它们的生命周期必须与它们引用的数据相匹配。如果str切片引用的数据被丢弃或移动,那么对该切片的引用将变得无效(悬垂引用)。 字符串处理库: Rust标准库为String和str提供了基本的字符串处理功能,可能不如其他语言的操作丰富。所以对于更复杂的字符串处理任务,你可能需要使用第三方库,如r...
看这样一个定义: Programming Rust 2nd Edition 第三章 通过字面量声明的是一个&str。通过to_string 方法转成一个String类型。 如果是一个字面量,那实际上是程序中预先分配好的只读内存,如上面的poodles。 String类型是一个 **拥有堆上数据所有权 **的指针,包含了capacity 和 长度 ...
【Rust每周一知】Rust为什么会有String和&str?!长文预警! 本文是Amos博客文章“Working with strings in Rust”的翻译。 原文地址:https://fasterthanli.me/blog/2020/working-with-strings-in-rust/ 人们选择Rust编程语言时总会遇到一个问题:为什么会有两种字符串类型?为什么会出现String和&str?
在程序开发中,处理文本数据几乎是不可避免的任务。对于Rust编程语言的开发者而言,理解字符串的两种主要形式——String和&str(即字符串切片)至关重要。这两种类型在内存管理和性能优化方面存在显著差异,了解它们的特性与使用场景,不仅能提升编程效率,更能帮助开发者写出更高效的代码。
&String 是String的borrowed类型,这只不过是一个指针类型,可以传递而不放弃ownership。事实上,一个&String可以当做是&str。foo()可以使用string slice或者borrowed String类型。如果我们想修改字符串的内容,只需要传递一个可变引用就行了。相互转换 &str => String String => &str String + &str => String Str...
Rust 提供了两种主要的字符串类型:String 和 &str。String 是拥有所有权的堆分配字符串,适用于需要动态分配和修改字符串的场景;而 &str 是对字符串数据的不可变引用,适用于只需要读取字符串的场景。通过理解它们的区别和使用场景,可以更高效地管理 Rust 程序中的字符串数据。
【Rust每周一知】Rust为什么会有String和&str?!长文预警! 本文是Amos博客文章“Working with strings in Rust”的翻译。 原文地址:https://fasterthanli.me/blog/2020/working-with-strings-in-rust/ 人们选择Rust编程语言时总会遇到一个问题:为什么会有两种字符串类型?为什么会出现String和&str?