rustlings
Rustlings
Option2
- 调用·
vec
的pop
方法时,它会从数组的末尾移除一个元素,并返回被移除的元素作为Option<T>
。因此,在这个例子中,由于数组的类型是Vec<Option<i8>>
,所以pop
方法返回的类型是Option<Option<i8>>
错误处理
Result<String, String>
:第一个类型是Ok()
中的数据类型,第二个类型是Err()
中的类型
use std::fmt::Error; |
?
相当于如下match
匹配代码;调用?
的函数返回值必须为Result
或Option
类型,有时候需要改写main
函数返回值类型
let x = match qty { |
Test
#[should_panic]
特性,允许测试代码出现Panic而不终止运行。
迭代器
- 消费者适配器是消费掉迭代器,然后返回一个值。那么迭代器适配器,顾名思义,会返回一个新的迭代器,这是实现链式方法调用的关键:
v.iter().map().filter()...
。 - 与消费者适配器不同,迭代器适配器是惰性的,意味着你需要一个消费者适配器来收尾,最终将迭代器转换成一个具体的值
let v1: Vec<i32> = vec![1, 2, 3]; |
collect
会自动根据指定类型对数据进行收集
// Complete the function and return a value of the correct type so the test |
product
直接将迭代器元素相乘,返回一个迭代器
pub fn factorial(num: u64) -> u64 { |
flat_map
将对应的元素展平成为新的迭代器
fn count_collection_iterator(collection: &[HashMap<String, Progress>], value: Progress) -> usize { |
Threads
Channel
- 发送者会获取tx所有权,多发送者的线程需要拷贝tx
fn send_tx(q: Queue, tx: mpsc::Sender<u32>) -> () { |
as_ref_mut
- AsRef 的主要作用是允许我们以统一的方式处理不同类型之间的转换。通过实现 AsRef trait,我们可以定义一个类型转换函数,该函数将一个类型转换为另一个类型的引用,而不是拥有新的所有权。
- 具体来说,如果我们有一个类型 T,并且希望将其转换为类型 U 的引用,我们可以实现 AsRef
<U>
trait 来完成这个转换。在实现中,我们需要提供一个名为 as_ref 的方法,该方法返回类型 &U。这样,我们就可以使用 as_ref 方法来将 T 转换为 U 的引用。
// Obtain the number of bytes (not characters) in the given argument. |
- 当我们在代码中需要将一个类型转换为另一个类型的引用时,可以使用 as_ref 方法来进行转换。这对于接受不同类型引用参数的函数或方法非常有用,因为它使得我们可以使用相同的代码来处理不同的类型。
- AsMut
<T>
是一个标准库中定义的 trait,它将类型 T 转换为一个指向其内部值的可变引用。当我们在泛型函数中使用 T: AsMut<u32>
这个 trait bound 时,我们告诉编译器要求 T 类型必须具备将其内部值作为 u32 类型的可变引用的能力
// Squares a number using as_mut(). |
编译成库
#[no_mangle]
保证rust编译时函数名不改变#[link_name="str"]
在外部块内,通过属性link_name,指定原生库中函数或静态对象的名称,编译器根据它可以为外部块链接原生库并导入该名称定义的函数或静态对象
// 标准库<stdlib.h>内置的abs函数 |
反转双向链表
- 从头开始遍历结点,对每个结点交换
prev
和next
指针 - 最后对整个链表交换
start
和end
pub fn reverse(&mut self) { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LZY的Code生活!