目錄
Rust 編程小技巧(5)?
使用 vec 的 push 方法
使用 String 的 append 方法
使用 push_str 拼接字符串
使用 Result 的 and_then 方法
使用 Option 的 map 方法
使用 match 和 enums 來匹配不同類型
使用 Option 的 or 方法組合多個 Option
使用 Result 的 map 方法轉(zhuǎn)換成功值
使用 AsRef 和 Borrow
?
Rust 編程小技巧(5)?
使用 vec 的 push 方法
要將元素添加到 Rust 中的 Vec 中,可以使用 push 方法。這比手動增加索引并重新分配內(nèi)存要更高效。
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 方法。這比手動分配新的內(nèi)存空間要更高效。
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 變量轉(zhuǎn)換為字符串,并使用 format! 宏創(chuàng)建一個描述字符串。然后,使用 push_str 方法將 age 字符串添加到描述字符串的末尾。最后,使用 println! 宏打印描述字符串。
使用 Result 的 and_then 方法
Rust 中的 Result 類型有一個 and_then 方法,它可以將一個 Result 中的成功值傳遞給一個函數(shù),并在失敗時將錯誤傳遞給另一個函數(shù)。
fn double(n: i32) -> Result<i32, &'static str> { ?
? ? if n % 2 == 0 { ?
? ? ? ? Ok(n * 2) ?
? ? } else { ?
? ? ? ? Err("輸入不是偶數(shù)") ?
? ? } ?
} ?
??
let n = 5; ?
??
let result = double(n).and_then(|n| { ?
? ? if n > 10 { ?
? ? ? ? Ok(n + 1) ?
? ? } else { ?
? ? ? ? Err("數(shù)值過大") ?
? ? } ?
}); ?
??
match result { ?
? ? Ok(m) => println!("成功: {}", m), ?
? ? Err(msg) => println!("失敗: {}", msg), ?
}
在這個例子中,使用 double 函數(shù)返回一個 Result<i32, &'static str>。然后,使用 and_then 方法將另一個函數(shù)傳遞給 Result 中的 Ok 值,并在該函數(shù)中也返回一個 Result。最后,使用 match語句處理結(jié)果。
使用 Option 的 map 方法
Rust 中的 Option 類型有一個 map 方法,它可以在 Some 情況下將一個值傳遞給一個函數(shù),并返回一個新的 Option。
fn double(n: i32) -> Option<i32> { ?
? ? 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函數(shù)返回一個 Option<i32>。然后,使用map方法將另一個函數(shù)傳遞給Option中的Some值,并在該函數(shù)中返回一個新的Option。最后,打印結(jié)果。
使用 match 和 enums 來匹配不同類型
enum Option<T> { ?
? ? Some(T), ?
? ? None, ?
} ?
??
fn match_option(x: Option<i32>) { ?
? ? match x { ?
? ? ? ? Option::Some(n) if n > 0 => println!("大于0的整數(shù)"), ?
? ? ? ? Option::Some(n) => println!("整數(shù)"), ?
? ? ? ? Option::None => println!("沒有值"), ?
? ? } ?
}
這個例子中,定義了一個 Option<T> 枚舉,用于表示可能存在或可能不存在某個值。然后,使用 match 表達式來匹配不同的選項,并根據(jù)情況執(zhí)行不同的操作。
使用 Option 的 or 方法組合多個 Option
fn max_of_two_options(x: Option<i32>, y: Option<i32>) -> Option<i32> { ?
? ? 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 函數(shù),用于找到兩個 Option 中的最大值。使用 Option 的 or 方法將兩個 Option 組合成一個新的 Option。
使用 Result 的 map 方法轉(zhuǎn)換成功值
fn double(n: i32) -> Result<i32, &'static str> { ?
? ? if n % 2 == 0 { ?
? ? ? ? Ok(n * 2) ?
? ? } else { ?
? ? ? ? Err("輸入不是偶數(shù)") ?
? ? } ?
} ?
??
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 函數(shù)返回一個 Result<i32, &'static str>。然后,使用 map 方法將另一個函數(shù)傳遞給 Result 中的 Ok 值,并在該函數(shù)中返回一個新的 Result。最后,使用 match語句處理結(jié)果。
使用 AsRef 和 Borrow
use std::borrow::Borrow; ?
use std::ops::AsRef; ?
??
struct Person { ?
? ? name: String, ?
? ? age: i32, ?
} ?
??
impl AsRef<str> for Person { ?
? ? fn as_ref(&self) -> &str { ?
? ? ? ? &self.name ?
? ? } ?
} ?
??
impl Borrow<str> 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); ?
}
這個例子中,實現(xiàn)了 AsRef 和 Borrow trait,以便可以將 Person 實例轉(zhuǎn)換為字符串引用。通過實現(xiàn) AsRef 和 Borrow trait,可以使用 & 操作符將 Person 實例轉(zhuǎn)換為字符串引用,并像使用字符串引用一樣使用它們。
相關(guān)閱讀:
Rust 編程小技巧摘選(1)_Hann Yang的博客-CSDN博客
Rust 編程小技巧摘選(2)_Hann Yang的博客-CSDN博客
Rust 編程小技巧摘選(3)_Hann Yang的博客-CSDN博客文章來源:http://www.zghlxwxcb.cn/news/detail-628614.html
Rust 編程小技巧摘選(4)_Hann Yang的博客-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-628614.html
到了這里,關(guān)于Rust 編程小技巧摘選(5)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!