提问人:Heineken 提问时间:11/16/2023 更新时间:11/16/2023 访问量:80
如何创建字符串文本
How to create a string literal
问:
你只想创建一个字符串文字,如“Hello, world!”,然后打印出来。你应该怎么做?
let str = "Hello, world!";
// or
let str = String::from("Hello, world!");
// or
let str = "Hello, world!".to_owned();
// or
let str = "Hello, world!".to_string();
有什么区别?
答:
2赞
Schwern
11/16/2023
#1
你只想创建一个字符串文字,如“Hello, world!”,然后打印出来。你应该怎么做?
println!("Hello, world!");
甚至不需要变量。
"Hello, world!"
是作为 Rust 二进制文件的一部分存储的字符串文字。它是不可变的。它与 和 类型不同。str
String
让我们看一下你的四行代码。
let s = "Hello, world!";
s
包含一个 str
,又名“字符串切片”,使用字符串文字初始化。它是 Rust 中内置的原始类型。这基本上是指向 in 和长度的指针。由于它指向不可变的字符串文本,因此无法更改字符串。它只能更改其起点和长度。H
"Hello, world!"
s
例如,修剪
通过移动起始指针和长度来工作。字符串文本保持不变。
// s points at the first "\t" and has a length of 9.
let s = "\t\nHello\t\n";
// trimmed points at "H" and has a length of 5.
let trimmed = s.trim()
println!(s) // "\t\nHello\t\n"
println!(trimmed) // "Hello"
// Both s and trimmed point at the same string literal.
// "\t\nHello\t\n"
// ^ ^
// | t----
// s------------
let s = String::from("Hello, world!");
s
包含使用字符串文本初始化的 String
。这是一个结构,它有自己的内存,用于字符串文字的副本。这允许您对内容进行更改;您正在更改副本。
let s = "Hello, world!".to_owned();
s
包含一个 .to_owned
用于从借用的数据创建拥有的数据,通常是通过克隆它。它适用于任何具有 ToOwned 特征的东西。String
当对字符串文本 (str
) 调用时,它返回一个 String。
let s = "Hello, world!".to_string();
s
包含一个 . 是 ToString 特征的一部分。它将值转换为 String。在引擎盖下,它可能相当于.String
to_string
String::from
评论
0赞
Schwern
11/16/2023
@cafce25 谢谢,我就跳过它。
上一个:将逗号表示值分隔到相应的行中
下一个:如何将“\”替换为空字符串?
评论
str
在任何这些情况下都不是字符串文本。 是。参考: doc.rust-lang.org/beta/reference/tokens.html#string-literals"Hello, world!"
str
"Hello, world!"
str
&str
&str
String