rustlings
variables3
rust中,没有限定符mut
的变量是不可以重新赋值的
variables4
变量需要初始化才可以使用,没有零值
variables5
可以对变量使用shadowing可以用来来改变变量的类型
variables6
const变量一定需要注明类型
functions5
表达式(statements)返回()
,而语句(expression)有返回类型
move_semantics3
函数参数需要可变时,需要将mut
放到变量名前
move_semantics4
函数参数需要可变时,需要将mut
放到变量名前
move_semantics5
变量的可变引用一个生命周期内只能有一个
structs2
..
语法实现从一个结构体创建另一个结构体
quiz2
- format!返回的是
String
to_lowercase
返回的String
into()
可以根据等号左边决定返回值类型
error5
- 在底层,
?
运算符在错误值上调用From::from
,并将它们转换为Box<dyn error::Error>
,这便是多态,这便意味着同一个函数可以返回不同类型的错误,只要这些错误值都实现了error::Error
trait
errors6
map_err
函数将Result<T, E>
转变为Result<T, F>
s.parse().map_err()
的Err(ParseIntError)转变为Err(ParsePosNonzeroError
),也即map_err中的函数只对Err的关联类型
做处理
generics3
- 为泛型添加约束
options2
- 对于
if let
和while let
,其中if let word = optional_word
会匹配Some和None,也就是说while let不会因为optional_integers_vec.pop()
得出的是None,就break出while
options3
- 对于
match
可以采取ref 模式
,那么这样一来就是借用了
iterators2
input.chars();
返回的Chars是一个基于&str的char的迭代器,as_str
会将迭代器接下来的数据看作一个&str
一个String
+&str
得到一个String
- 一个函数的形参是
&str
,那么对于String
的变量,可以使用&String作为实参传递,
iterators3
collect
可以返回多种集合,并且Result<Collection<T>, E>
是一种集合
iterators4
fold
需要两个参数,这里的初始值是1,闭包是乘法,reduece
会将iterator的第一个元素作为初始值,不过其返回值是一个Option
iterators5
- filter的闭包满足FnMut(&Self::Item) -> bool,那么闭包接收的参数,注意闭包本身是不用说明参数与返回值类型,在
trait bound
中说明了filter接收的闭包的参数是一个引用而且,对于values()的返回,其关联类型是引用,那么val的类型就是&&,所以可以通过&&val解构
threads1
- 为什么是6个?
macros2
- 对于marcos,需要注意其定义与使用的先后顺序
macros3
mod
中的宏定义需要加上#[macro_export]
就可以被外部使用
maros4
- 一个macro可以存在多个匹配分支,且它们之间必须用
;
分割
quiz4
- 此处是声明宏,
clippy1
- clippy是rust的静态分析工具,
using_as``
as
运算符可以用来renaming以及type casting
from_into
- 如果impl了
From trait
,那么Into trait
也一并自动实现了split_once
会将一个&str划分为两个
from_str
- 没咋看懂?
as_ref_mut
AsRef<str>
这个泛型约束表示这个函数接收所有可以转换&str
的类型的实参
advanced_errs2
- from_str参考这里