Rust知识篇03-字符、布尔、单元类型、输出、语句表达式
字符类型(char)
类似英文中的字母,中文中的汉字
javascript
fn main() {
let _c = 'z';
let _z = 'ℤ';
let _g = '国';
let _heart_eyed_cat = '😻';
println!("{}, {}, {}, {}", _c, _z, _g, _heart_eyed_cat)
}
//输出
z, ℤ, 国, 😻
字符类型占用 4 个字节
javascript
fn main() {
let x = '中';
println!("字符'中'占用了{}字节的内存大小", size_of_val(&x));
}
//输出
字符'中'占用了4字节的内存大小
字符和字符串
Rust 的字符只能用 ''
来表示, ""
是留给字符串的
🍎字符和字符串区别
(单个其实就是字符(类似A),多个字符就是字符串(类似ABD))
字符 是单个文本单位,而字符串是由多个字符组成的文本。
- 字符(Character) :
- 定义:字符是单个字母、数字、符号或其他可显示或不可显示的符号。它通常用来表示文本中的单个单位。
- 存储:字符通常占用一个字节(在ASCII编码中)或两个字节(在Unicode编码中)。
- 示例 :
A
、b
、1
、#
都是字符。 - 用途:字符主要用于表示文本的单个元素,常用于字符处理、字符比较等场景。
- 字符串(String) :
- 定义:字符串是由一系列字符组成的文本序列,可以包括空格、标点符号、数字等字符。字符串是字符的集合,可以是一个或多个字符。
- 存储 :字符串通常是一个字符数组,大小取决于字符串的长度,每个字符通常占用一个或两个字节(取决于字符编码)。在一些语言中,字符串的结尾可能会有一个特殊的标识符(例如 C 语言中的 null 终止符
\0
)。 - 示例 :
"Hello"
、"123"
、"abc123!"
都是字符串。 - 用途:字符串用于表示更复杂的文本信息,通常在处理文本数据时用作输入、输出或存储信息的方式。
布尔(bool)
布尔类型有两个值:true
和 false
,布尔值占用内存的大小为 1
个字节
Rust 中布尔类型(<font style="color:rgb(36, 41, 47);">bool
)主要用于流程控制
javascript
// if 条件判断(if 语句)
fn main() {
let is_raining:bool = true;
if is_raining {
println!("带伞出门");
} else {
println!("不用带伞");
}
}
// while循环
fn main() {
let mut count = 0;
let continue_loop = true;
while continue_loop {
count += 1;
println!("计数: {}", count);
if count == 5 {
break;
}
}
}
// 逻辑运算判断
fn main() {
let has_ticket = true;
let is_adult = false;
if has_ticket && is_adult {
println!("允许进场");
} else {
println!("不允许进场");
}
}
单元类型(unit)
单元类型就是 ()
常见的下面输出的返回就是 ()
javascript
println!("允许进场");
输出
Rust 中,println!
和 print!
都用于输出文本,区别如下:
👉println!
(注意是L的小写)
在输出文本后自动换行。也就是说,每次调用 println!
,都会在输出的内容后面添加一个换行符 \n
。
可以用于输出文本并在结尾自动换行
plain
fn main() {
println!("Hello, world!"); // 会输出 "Hello, world!" 并换行
}
👉print!
print!
输出但是不会自动换行。
plain
fn main() {
print!("Hello, "); // 不会换行
print!("world!"); // 会继续在同一行输出
}
👉eprintln!
:
eprintln!
与 println!
类似,区别它输出的是标准错误流(stderr),而 println!
输出的是标准输出流(stdout)。eprintln!
也会自动换行
plain
fn main() {
eprintln!("This is an error message!");
}
- 特点 :通常用于输出错误信息,和
println!
区别在于它发送到标准错误流而不是标准输出流。
👉format!
format!
用来将格式化的字符串返回为 String
类型,不输出到控制台。可以用于生成字符串而不是直接输出
plain
fn main() {
let name = "Alice";
let age = 30;
let formatted_string = format!("My name is {} and I am {} years old.", name, age);
println!("{}", formatted_string); // 输出: My name is Alice and I am 30 years old.
}
可以将我们需要格式化字符串存储到变量进行进一步处理
🍎实际应用-数字格式化
javascript
//数字格式化
fn main() {
let pi = 3.1415926535;
let formatted = format!("Pi is approximately {:.3}", pi); // 保留3位小数
println!("{}", formatted);
// 输出: Pi is approximately 3.142
}
语句和表达式
语句(statement)和表达式(expression)
区分语句和表达式主要就是:语句没有返回值,表达式有返回值
🍎语句
javascript
// 语句
fn main() {
let _a = 8;
let _b: Vec<f64> = Vec::new();
let (_a, _c) = ("hi", false);
}
🍎表达式
javascript
// 表达式
let x = {
let temp = 10;
temp + 5 // 注意这里没有分号,块的结果是 temp + 5
};
Rust 的函数体是由一系列语句组成,最后由一个表达式来返回值
javascript
fn main() {
let x= 5;
let y = 10;
let z = x + y;
println!("The sum of {} and {} is {}", x, y, z);
// The sum of 5 and 10 is 15
}
Rust需要明确区分基于语句(statement)和表达式(expression)的方式这两个概念
表达式是函数式语言的重要特征,表达式总要返回值。
javascript
fn main() {
let x=add_with_extra(5, 10);
println!("The sum of X is {}", x);
// The sum of X is 21
}
fn add_with_extra(x: i32, y: i32) -> i32 {
let x = x + 1; // 语句
let y = y + 5; // 语句
x + y // 表达式
}