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返回的Stringinto()可以根据等号左边决定返回值类型
error5
- 在底层,
?运算符在错误值上调用From::from,并将它们转换为Box<dyn error::Error>,这便是多态,这便意味着同一个函数可以返回不同类型的错误,只要这些错误值都实现了error::Errortrait
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参考这里
![]()






一个

,
而且,对于values()的返回,其关联类型是引用,那么val的类型就是&&,
所以可以通过&&val解构








浙公网安备 33010602011771号