目录
Rust 编程小技巧(5)
使用 vec 的 push 方法
使用 String 的 append 方法
使用 push_str 拼接字符串
使用 Result 的 and_then 方法
使用 Option 的 map 方法
使用 match 和 enums 来匹配不同类型
使用 Option 的 or 方法组合多个 Option
使用 Result 的 map 方法转换成功值
使用 AsRef 和 Borrow
Rust 编程小技巧(5)
使用 vec 的 push 方法
要将元素添加到 Rust 中的 Vec 中,可以使用 push 方法。这比手动增加索引并重新分配内存要更高效。
let mut vec = vec![1, 2, 3];
vec.push(4);
println!("{:?}", vec);
在这个例子中,使用 vec 的 push 方法将值 4 添加到 vec 中。最后,打印 vec 的值,输出为 [1, 2, 3, 4]。
使用 String 的 append 方法
要将字符串添加到 Rust 中的 String 中,可以使用 append 方法。这比手动分配新的内存空间要更高效。
let mut str = String::from("Hello, ");
str.append("world!");
println!="{:?}", str);
在这个例子中,使用 String 的 append方法将字符串 “world!” 添加到 str 中。最后,打印 str 的值,输出为 “Hello, world!”。
使用 push_str 拼接字符串
let name = "Alice";
let age = "25";
let mut description = format!("Name: {}", name);
description.push_str(", Age: {}", age);
println!("{}", description);
这个例子中,使用字符串拼接方法 push_str() 将多个字符串拼接成一个新的字符串。首先将 name 和 age 变量转换为字符串,并使用 format! 宏创建一个描述字符串。然后,使用 push_str 方法将 age 字符串添加到描述字符串的末尾。最后,使用 println! 宏打印描述字符串。
使用 Result 的 and_then 方法
Rust 中的 Result 类型有一个 and_then 方法,它可以将一个 Result 中的成功值传递给一个函数,并在失败时将错误传递给另一个函数。
fn double(n: i32) -> Result {
if n % 2 == 0 {
Ok(n * 2)
} else {
Err("输入不是偶数")
}
}
let n = 5;
let result = double(n).and_then(|n| {
if n > 10 {
Ok(n + 1)
} else {
Err("数值过大")
}
});
match result {
Ok(m) => println!("成功: {}", m),
Err(msg) => println!("失败: {}", msg),
}
在这个例子中,使用 double 函数返回一个 Result。然后,使用 and_then 方法将另一个函数传递给 Result 中的 Ok 值,并在该函数中也返回一个 Result。最后,使用 match语句处理结果。
使用 Option 的 map 方法
Rust 中的 Option 类型有一个 map 方法,它可以在 Some 情况下将一个值传递给一个函数,并返回一个新的 Option。
fn double(n: i32) -> Option {
if n % 2 == 0 {
Some(n * 2)
} else {
None
}
}
let n = 5;
let result = double(n).map(|n| {
if n > 10 {
n + 1
} else {
n
}
});
println!("{:?}", result);
在这个例子中,使用 double函数返回一个 Option。然后,使用map方法将另一个函数传递给Option中的Some值,并在该函数中返回一个新的Option。最后,打印结果。
使用 match 和 enums 来匹配不同类型
enum Option {
Some(T),
None,
}
fn match_option(x: Option) {
match x {
Option::Some(n) if n > 0 => println!("大于0的整数"),
Option::Some(n) => println!("整数"),
Option::None => println!("没有值"),
}
}
这个例子中,定义了一个 Option 枚举,用于表示可能存在或可能不存在某个值。然后,使用 match 表达式来匹配不同的选项,并根据情况执行不同的操作。
使用 Option 的 or 方法组合多个 Option
fn max_of_two_options(x: Option, y: Option) -> Option {
x.or(y)
}
let a = Some(5);
let b = None;
let result = max_of_two_options(a, b);
match result {
Some(m) => println!("成功: {}", m),
None => println!("没有值"),
}
这个例子中,定义了一个 max_of_two_options 函数,用于找到两个 Option 中的最大值。使用 Option 的 or 方法将两个 Option 组合成一个新的 Option。
使用 Result 的 map 方法转换成功值
fn double(n: i32) -> Result {
if n % 2 == 0 {
Ok(n * 2)
} else {
Err("输入不是偶数")
}
}
let n = 5;
let result = double(n).map(|n| {
if n > 10 {
n + 1
} else {
n
}
});
match result {
Ok(m) => println!("成功: {}", m),
Err(msg) => println!("失败: {}", msg),
}
这个例子中,使用 double 函数返回一个 Result。然后,使用 map 方法将另一个函数传递给 Result 中的 Ok 值,并在该函数中返回一个新的 Result。最后,使用 match语句处理结果。
使用 AsRef 和 Borrow
use std::borrow::Borrow;
use std::ops::AsRef;
struct Person {
name: String,
age: i32,
}
impl AsRef for Person {
fn as_ref(&self) -> &str {
&self.name
}
}
impl Borrow for Person {
fn borrow(&self) -> &str {
&self.name
}
}
fn main() {
let person = Person {
name: String::from("Alice"),
age: 25,
};
let name_ref: &str = &person.name;
let age_ref: &str = &person.name;
println!("Name: {}", name_ref);
println!("Age: {}", age_ref);
}
这个例子中,实现了 AsRef 和 Borrow trait,以便可以将 Person 实例转换为字符串引用。通过实现 AsRef 和 Borrow trait,可以使用 & 操作符将 Person 实例转换为字符串引用,并像使用字符串引用一样使用它们。
相关阅读:
Rust 编程小技巧摘选(1)_Hann Yang的博客-CSDN博客
Rust 编程小技巧摘选(2)_Hann Yang的博客-CSDN博客
Rust 编程小技巧摘选(3)_Hann Yang的博客-CSDN博客
Rust 编程小技巧摘选(4)_Hann Yang的博客-CSDN博客