rustlings

https://github.com/rust-lang/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::Errortrait

errors6

  • map_err函数将Result<T, E>转变为Result<T, F>s.parse().map_err()的Err(ParseIntError)转变为Err(ParsePosNonzeroError),也即map_err中的函数只对Err的关联类型做处理

generics3

  • 为泛型添加约束

options2

  • 对于if letwhile 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参考这里
posted @ 2022-06-21 22:39  抿了抿嘴丶  阅读(210)  评论(0编辑  收藏  举报