From 5dc4708fe207494dad46b500cff7d0166b464455 Mon Sep 17 00:00:00 2001 From: "nap.liu" Date: Mon, 11 Dec 2023 18:40:53 +0800 Subject: [PATCH] add code --- .gitignore | 1 + .vscode/settings.json | 2 +- 10.Modules/10.1 Visibility/Cargo.lock | 7 + 10.Modules/10.1 Visibility/Cargo.toml | 8 + 10.Modules/10.1 Visibility/src/main.rs | 127 +++++ 10.Modules/10.2 Struct visibility/Cargo.lock | 7 + 10.Modules/10.2 Struct visibility/Cargo.toml | 8 + 10.Modules/10.2 Struct visibility/src/main.rs | 55 ++ .../10.3 The use declaration/Cargo.lock | 7 + .../10.3 The use declaration/Cargo.toml | 8 + .../10.3 The use declaration/src/main.rs | 69 +++ 10.Modules/10.4 super and self/Cargo.lock | 7 + 10.Modules/10.4 super and self/Cargo.toml | 8 + 10.Modules/10.4 super and self/src/main.rs | 55 ++ 10.Modules/10.5 File hierarchy/Cargo.lock | 7 + 10.Modules/10.5 File hierarchy/Cargo.toml | 8 + 10.Modules/10.5 File hierarchy/src/main.rs | 28 + 10.Modules/10.5 File hierarchy/src/my.rs | 21 + .../src/my/inaccessible.rs | 5 + .../10.5 File hierarchy/src/my/nested.rs | 10 + 11.Crates/rary.rs | 31 ++ 11.Crates/using_library.rs | 20 + 12.Cargo/12.1 Dependencies/Cargo.lock | 169 ++++++ 12.Cargo/12.1 Dependencies/Cargo.toml | 9 + 12.Cargo/12.1 Dependencies/src/main.rs | 70 +++ 12.Cargo/12.2 Conventions/Cargo.lock | 7 + 12.Cargo/12.2 Conventions/Cargo.toml | 8 + .../12.2 Conventions/src/bin/my_other_bin.rs | 4 + 12.Cargo/12.2 Conventions/src/main.rs | 11 + 12.Cargo/12.3 Testing/Cargo.lock | 7 + 12.Cargo/12.3 Testing/Cargo.toml | 8 + 12.Cargo/12.3 Testing/src/main.rs | 98 ++++ 12.Cargo/12.4 Build Scripts/Cargo.lock | 7 + 12.Cargo/12.4 Build Scripts/Cargo.toml | 8 + 12.Cargo/12.4 Build Scripts/src/main.rs | 23 + 13.Attributes/13 Attributes/Cargo.lock | 7 + 13.Attributes/13 Attributes/Cargo.toml | 8 + 13.Attributes/13 Attributes/src/main.rs | 30 ++ 13.Attributes/13.1 dead_code/Cargo.lock | 7 + 13.Attributes/13.1 dead_code/Cargo.toml | 8 + 13.Attributes/13.1 dead_code/src/main.rs | 19 + 13.Attributes/13.2 Crates/main.rs | 25 + 13.Attributes/13.3 cfg/Cargo.lock | 7 + 13.Attributes/13.3 cfg/Cargo.toml | 8 + 13.Attributes/13.3 cfg/src/main.rs | 38 ++ 13.Attributes/13.4 Custom/custom | Bin 0 -> 514040 bytes 13.Attributes/13.4 Custom/custom.rs | 14 + 14.Generics/14. generics/Cargo.lock | 7 + 14.Generics/14. generics/Cargo.toml | 8 + 14.Generics/14. generics/src/main.rs | 46 ++ 14.Generics/14.1 Functions/Cargo.lock | 7 + 14.Generics/14.1 Functions/Cargo.toml | 8 + 14.Generics/14.1 Functions/src/main.rs | 41 ++ 14.Generics/14.2 Implementation/Cargo.lock | 7 + 14.Generics/14.2 Implementation/Cargo.toml | 8 + 14.Generics/14.2 Implementation/src/main.rs | 45 ++ 14.Generics/14.3 Traits/Cargo.lock | 7 + 14.Generics/14.3 Traits/Cargo.toml | 8 + 14.Generics/14.3 Traits/src/main.rs | 34 ++ 14.Generics/14.4 Bounds/Cargo.lock | 7 + 14.Generics/14.4 Bounds/Cargo.toml | 8 + 14.Generics/14.4 Bounds/src/main.rs | 112 ++++ 14.Generics/14.5 Multiple bounds/Cargo.lock | 7 + 14.Generics/14.5 Multiple bounds/Cargo.toml | 8 + 14.Generics/14.5 Multiple bounds/src/main.rs | 30 ++ 14.Generics/14.6 Where clauses/Cargo.lock | 7 + 14.Generics/14.6 Where clauses/Cargo.toml | 8 + 14.Generics/14.6 Where clauses/src/main.rs | 29 + 14.Generics/14.7 newtype idiom/Cargo.lock | 7 + 14.Generics/14.7 newtype idiom/Cargo.toml | 8 + 14.Generics/14.7 newtype idiom/src/main.rs | 41 ++ 14.Generics/14.8 Associated items/Cargo.lock | 7 + 14.Generics/14.8 Associated items/Cargo.toml | 8 + 14.Generics/14.8 Associated items/src/main.rs | 122 +++++ .../14.9 Phantom type parameters/Cargo.lock | 7 + .../14.9 Phantom type parameters/Cargo.toml | 8 + .../14.9 Phantom type parameters/src/main.rs | 58 ++ 9.Functions/src/main.rs | 501 ++++++++++++++++-- readme.md | 0 79 files changed, 2269 insertions(+), 39 deletions(-) create mode 100644 10.Modules/10.1 Visibility/Cargo.lock create mode 100644 10.Modules/10.1 Visibility/Cargo.toml create mode 100644 10.Modules/10.1 Visibility/src/main.rs create mode 100644 10.Modules/10.2 Struct visibility/Cargo.lock create mode 100644 10.Modules/10.2 Struct visibility/Cargo.toml create mode 100644 10.Modules/10.2 Struct visibility/src/main.rs create mode 100644 10.Modules/10.3 The use declaration/Cargo.lock create mode 100644 10.Modules/10.3 The use declaration/Cargo.toml create mode 100644 10.Modules/10.3 The use declaration/src/main.rs create mode 100644 10.Modules/10.4 super and self/Cargo.lock create mode 100644 10.Modules/10.4 super and self/Cargo.toml create mode 100644 10.Modules/10.4 super and self/src/main.rs create mode 100644 10.Modules/10.5 File hierarchy/Cargo.lock create mode 100644 10.Modules/10.5 File hierarchy/Cargo.toml create mode 100644 10.Modules/10.5 File hierarchy/src/main.rs create mode 100644 10.Modules/10.5 File hierarchy/src/my.rs create mode 100644 10.Modules/10.5 File hierarchy/src/my/inaccessible.rs create mode 100644 10.Modules/10.5 File hierarchy/src/my/nested.rs create mode 100644 11.Crates/rary.rs create mode 100644 11.Crates/using_library.rs create mode 100644 12.Cargo/12.1 Dependencies/Cargo.lock create mode 100644 12.Cargo/12.1 Dependencies/Cargo.toml create mode 100644 12.Cargo/12.1 Dependencies/src/main.rs create mode 100644 12.Cargo/12.2 Conventions/Cargo.lock create mode 100644 12.Cargo/12.2 Conventions/Cargo.toml create mode 100644 12.Cargo/12.2 Conventions/src/bin/my_other_bin.rs create mode 100644 12.Cargo/12.2 Conventions/src/main.rs create mode 100644 12.Cargo/12.3 Testing/Cargo.lock create mode 100644 12.Cargo/12.3 Testing/Cargo.toml create mode 100644 12.Cargo/12.3 Testing/src/main.rs create mode 100644 12.Cargo/12.4 Build Scripts/Cargo.lock create mode 100644 12.Cargo/12.4 Build Scripts/Cargo.toml create mode 100644 12.Cargo/12.4 Build Scripts/src/main.rs create mode 100644 13.Attributes/13 Attributes/Cargo.lock create mode 100644 13.Attributes/13 Attributes/Cargo.toml create mode 100644 13.Attributes/13 Attributes/src/main.rs create mode 100644 13.Attributes/13.1 dead_code/Cargo.lock create mode 100644 13.Attributes/13.1 dead_code/Cargo.toml create mode 100644 13.Attributes/13.1 dead_code/src/main.rs create mode 100644 13.Attributes/13.2 Crates/main.rs create mode 100644 13.Attributes/13.3 cfg/Cargo.lock create mode 100644 13.Attributes/13.3 cfg/Cargo.toml create mode 100644 13.Attributes/13.3 cfg/src/main.rs create mode 100755 13.Attributes/13.4 Custom/custom create mode 100644 13.Attributes/13.4 Custom/custom.rs create mode 100644 14.Generics/14. generics/Cargo.lock create mode 100644 14.Generics/14. generics/Cargo.toml create mode 100644 14.Generics/14. generics/src/main.rs create mode 100644 14.Generics/14.1 Functions/Cargo.lock create mode 100644 14.Generics/14.1 Functions/Cargo.toml create mode 100644 14.Generics/14.1 Functions/src/main.rs create mode 100644 14.Generics/14.2 Implementation/Cargo.lock create mode 100644 14.Generics/14.2 Implementation/Cargo.toml create mode 100644 14.Generics/14.2 Implementation/src/main.rs create mode 100644 14.Generics/14.3 Traits/Cargo.lock create mode 100644 14.Generics/14.3 Traits/Cargo.toml create mode 100644 14.Generics/14.3 Traits/src/main.rs create mode 100644 14.Generics/14.4 Bounds/Cargo.lock create mode 100644 14.Generics/14.4 Bounds/Cargo.toml create mode 100644 14.Generics/14.4 Bounds/src/main.rs create mode 100644 14.Generics/14.5 Multiple bounds/Cargo.lock create mode 100644 14.Generics/14.5 Multiple bounds/Cargo.toml create mode 100644 14.Generics/14.5 Multiple bounds/src/main.rs create mode 100644 14.Generics/14.6 Where clauses/Cargo.lock create mode 100644 14.Generics/14.6 Where clauses/Cargo.toml create mode 100644 14.Generics/14.6 Where clauses/src/main.rs create mode 100644 14.Generics/14.7 newtype idiom/Cargo.lock create mode 100644 14.Generics/14.7 newtype idiom/Cargo.toml create mode 100644 14.Generics/14.7 newtype idiom/src/main.rs create mode 100644 14.Generics/14.8 Associated items/Cargo.lock create mode 100644 14.Generics/14.8 Associated items/Cargo.toml create mode 100644 14.Generics/14.8 Associated items/src/main.rs create mode 100644 14.Generics/14.9 Phantom type parameters/Cargo.lock create mode 100644 14.Generics/14.9 Phantom type parameters/Cargo.toml create mode 100644 14.Generics/14.9 Phantom type parameters/src/main.rs create mode 100644 readme.md diff --git a/.gitignore b/.gitignore index 400485b..686b676 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ **/target/ .DS_Store +*.rlib diff --git a/.vscode/settings.json b/.vscode/settings.json index 2535759..421d036 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,5 @@ { "rust-analyzer.linkedProjects": [ - "./9.Functions/Cargo.toml" + "./14.Generics/14.9 Phantom type parameters/Cargo.toml" ] } diff --git a/10.Modules/10.1 Visibility/Cargo.lock b/10.Modules/10.1 Visibility/Cargo.lock new file mode 100644 index 0000000..f3e3f38 --- /dev/null +++ b/10.Modules/10.1 Visibility/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "visibility" +version = "0.1.0" diff --git a/10.Modules/10.1 Visibility/Cargo.toml b/10.Modules/10.1 Visibility/Cargo.toml new file mode 100644 index 0000000..98027af --- /dev/null +++ b/10.Modules/10.1 Visibility/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "visibility" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/10.Modules/10.1 Visibility/src/main.rs b/10.Modules/10.1 Visibility/src/main.rs new file mode 100644 index 0000000..b721c78 --- /dev/null +++ b/10.Modules/10.1 Visibility/src/main.rs @@ -0,0 +1,127 @@ +//! +//! # 模块化 +//! +//! Rust 提供了非常强大的模块化系统,可以按照等级拆分代码到小的模块中。 +//! 模块中还可以通过 `pub` 关键字控制代码是否对外可见。 +//! +//! 模块中可以放置 函数(function)、结构体(struct)、特性(trait)、和实现(impl)、甚至其他的模块(module) +//! + +/// 默认情况下模块内部的所有内容都是私有(private)的, +/// 需要通过 `pub` 关键字来让私有变成外部可访问的。 +// 模块名为 my_mod 的模块 +mod my_mod { + // 模块内部的私有函数,模块外部不可见,也不能使用。 + fn private_function() { + println!("called `my_mod::private_function()`"); + } + + // 使用 `pub` 关键字让 `function` 函数外面可以调用。 + pub fn function() { + println!("called `my_mod::function()`"); + } + + // 公开的函数内部可以使用当前模块内的任意方法,不管使用的函数是不是公开的。 + pub fn indirect_access() { + print!("called `my_mod::indirect_access()`, that\n> "); + private_function(); + } + + // 模块可以嵌套使用。 + pub mod nested { + pub fn function() { + println!("called `my_mod::nested::function()`"); + } + + #[allow(dead_code)] + fn private_function() { + println!("called `my_mod::nested::private_function()`"); + } + + // 可以通过 `pub(in path)` 的语法来指定某些方法,只允许指定的父模块访问, + // `path` 只能是父模块或者祖先模块。 + pub(in crate::my_mod) fn public_function_in_my_mod() { + print!("called `my_mod::nested::public_function_in_my_mod()`, that\n> "); + public_function_in_nested(); + } + + // 如果使用 `pub(self)` 关键字定义的话,那就表示该函数只能在当前模块内部使用, + // 等同于 private + pub(self) fn public_function_in_nested() { + println!("called `my_mod::nested::public_function_in_nested()`"); + } + + // `pub(super)` 等同于当前的父模块,`super` 关键字就是父模块的别名 + pub(super) fn public_function_in_super_mod() { + println!("called `my_mod::nested::public_function_in_super_mod()`"); + } + } + + pub fn call_public_function_in_my_mod() { + print!("called `my_mod::call_public_function_in_my_mod()`, that\n> "); + nested::public_function_in_my_mod(); + print!("> "); + nested::public_function_in_super_mod(); + } + + // pub(crate) 表示这个函数只允许在当前的包内可用,`crate` 等于当前的包 + pub(crate) fn public_function_in_crate() { + println!("called `my_mod::public_function_in_crate()`"); + } + + // 嵌套的模块依旧遵循私有规则 + mod private_nested { + #[allow(dead_code)] + pub fn function() { + println!("called `my_mod::private_nested::function()`"); + } + + // 因为当前模块没有对外公开,所以即使私有模块内部的方法公开了访问作用域,依旧还是不可见的。 + #[allow(dead_code)] + pub(crate) fn restricted_function() { + println!("called `my_mod::private_nested::restricted_function()`"); + } + } +} + +fn function() { + println!("called `function()`"); +} + +fn main() { + // 因为模块有独立的作用域,所以可以避免同名函数的冲突问题。 + function(); // 全局作用域的函数 + + my_mod::function(); // 模块内部的函数 + + // 在模块外面可以通过模块的名称,使用 `::` 作用域访问关键字访问模块内部的方法,或者嵌套在模块内部的模块。 + my_mod::indirect_access(); + my_mod::nested::function(); + my_mod::call_public_function_in_my_mod(); + + // 使用 `pub(crate)` 声明的方法,只要在同一个包(crate)中就可以随意使用。 + my_mod::public_function_in_crate(); + + // 在模块中通过 `pub(in path)` 声明的方法,只能在 `path` 限定的地方使用 + // 报错!函数 `public_function_in_my_mod` 是私有的 + // my_mod::nested::public_function_in_my_mod(); + // TODO ^ 移除注释查看错误 + + // 模块的私有项在外部不管什么情况下都不能被直接访问 + + // 报错! `private_function` 是私有的 + //my_mod::private_function(); + // TODO ^ 移除注释查看错误 + + // 报错! `private_function` 是私有的 + //my_mod::nested::private_function(); + // TODO ^ 移除注释查看错误 + + // 报错! `private_nested` 是私有模块 + //my_mod::private_nested::function(); + // TODO ^ 移除注释查看错误 + + // 报错! `private_nested` 是私有模块 + //my_mod::private_nested::restricted_function(); + // TODO ^ 移除注释查看错误 +} diff --git a/10.Modules/10.2 Struct visibility/Cargo.lock b/10.Modules/10.2 Struct visibility/Cargo.lock new file mode 100644 index 0000000..3766631 --- /dev/null +++ b/10.Modules/10.2 Struct visibility/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "struct_visibility" +version = "0.1.0" diff --git a/10.Modules/10.2 Struct visibility/Cargo.toml b/10.Modules/10.2 Struct visibility/Cargo.toml new file mode 100644 index 0000000..27f2a58 --- /dev/null +++ b/10.Modules/10.2 Struct visibility/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "struct_visibility" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/10.Modules/10.2 Struct visibility/src/main.rs b/10.Modules/10.2 Struct visibility/src/main.rs new file mode 100644 index 0000000..3af7408 --- /dev/null +++ b/10.Modules/10.2 Struct visibility/src/main.rs @@ -0,0 +1,55 @@ +//! +//! 模块中结构体的可见性 +//! +//! 结构体的字段拥有一个额外的可见性配置, +//! 默认情况下结构体内部的字段对外都是不可见的, +//! 需要在每个字段上手动指定 `pub` 来让外部可以访问指定的字段, +//! +//! + +mod my { + // 这个结构体对外可见 + pub struct OpenBox { + // 这个字段也对外可见 + pub contents: T, + } + + // 这个结构体对外可见 + pub struct ClosedBox { + // 这个字段外面不可见 + #[allow(dead_code)] + contents: T, + } + + impl ClosedBox { + // 结构体上拥有一个 `new` 方法是对外可见的 + pub fn new(contents: T) -> ClosedBox { + ClosedBox { contents } + } + } +} + +fn main() { + // 如果结构体可见并且所有的字段也都对外可见的话,则可以直接声明字面量就能的到结构体实例 + let open_box = my::OpenBox { + contents: "public information", + }; + + // 结构体的字段可以直接访问 + println!("The open box contains: {}", open_box.contents); + + // 公开的结构体如果有私有的字段,则不能直接使用字面量形式构造实例,因为私有字段对外不可见。 + // 错误!`ClosedBox` 拥有不可见的私有字段。 + // let closed_box = my::ClosedBox { + // contents: "classified information", + // }; + // TODO ^ 移除注释查看错误 + + // 拥有私有结构的结构体可以通过结构上的公开的关联函数来构造结构体的实例。 + let _closed_box = my::ClosedBox::new("classified information"); + + // 结构体的私有字段外部是不能访问的。 + // 错误! `contents` 字段是私有的 + // println!("The closed box contains: {}", _closed_box.contents); + // TODO ^ 移除注释查看错误 +} diff --git a/10.Modules/10.3 The use declaration/Cargo.lock b/10.Modules/10.3 The use declaration/Cargo.lock new file mode 100644 index 0000000..e05a7ca --- /dev/null +++ b/10.Modules/10.3 The use declaration/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "the_use_declaration" +version = "0.1.0" diff --git a/10.Modules/10.3 The use declaration/Cargo.toml b/10.Modules/10.3 The use declaration/Cargo.toml new file mode 100644 index 0000000..efb5fd4 --- /dev/null +++ b/10.Modules/10.3 The use declaration/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "the_use_declaration" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/10.Modules/10.3 The use declaration/src/main.rs b/10.Modules/10.3 The use declaration/src/main.rs new file mode 100644 index 0000000..686c17a --- /dev/null +++ b/10.Modules/10.3 The use declaration/src/main.rs @@ -0,0 +1,69 @@ +//! +//! 使用 `use` 声明 +//! +//! `use` 关键字可以把一个完整的路径在当前的作用域中, +//! 重新绑定到一个新的名字,这样可以减少完整路径的使用。 +//! +//! 常用的几种形式如下 +//! +//! ``` +//! { +//! // 把 `std::rc::Rc` 使用 `Rc` 这个名字绑定到当前的作用域下 +//! use std::rc::Rc; +//! } +//! +//! { +//! // 把 `std::rc::Rc` 使用 `StdRc` 这个名字绑定到当前的作用域下 +//! use std::rc::Rc as StdRc; +//! } +//! +//! { +//! // 把 `std::rc` 下的所有导出项全都绑定到当前作用域下 +//! use std::rc::*; +//! } +//! +//! { +//! // `self` 关键字代表的是前一级的路径, +//! // 在这里 `self` 等于把 `std::rc` 使用 `rc` 这个关键字绑定到当前作用域, +//! // 同时把 `std::rc::Rc` 使用 `StdRc` 绑定到当前作用域, +//! // 和 `std::rc::Weak` 使用 `Weak` 绑定到当前作用域。 +//! use std::rc::{self, Rc as StdRc, Weak}; +//! } +//! +//! ``` +//! + +// 把 `deeply::nested::function` 绑定到 `other_function`。 +use deeply::nested::function as other_function; + +fn function() { + println!("called `function()`"); +} + +mod deeply { + pub mod nested { + pub fn function() { + println!("called `deeply::nested::function()`"); + } + } +} + +fn main() { + // 使用重新绑定的名字调用 `deeply::nested::function` + other_function(); + + println!("Entering block"); + { + // `crate` 代表当前的包,这里相当于把 `crate::deeply::nested::function` 重新绑定到当前作用域,名字叫 `function`, + // 因为 `shadowing(遮蔽)` 的规则,`use` 关键字重新绑定的 `function` 会覆盖掉当前的全局作用域下的 `function` 函数。 + use crate::deeply::nested::function; + + // 这里调用的函数实际上是 `deeply::nested::function`, + // 因为 `use` 关键字的重新绑定在当前的嵌套作用域中遮蔽了全局作用域下的 `function` + function(); + + println!("Leaving block"); + } + + function(); +} diff --git a/10.Modules/10.4 super and self/Cargo.lock b/10.Modules/10.4 super and self/Cargo.lock new file mode 100644 index 0000000..52e6337 --- /dev/null +++ b/10.Modules/10.4 super and self/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "super_and_self" +version = "0.1.0" diff --git a/10.Modules/10.4 super and self/Cargo.toml b/10.Modules/10.4 super and self/Cargo.toml new file mode 100644 index 0000000..b5a9e08 --- /dev/null +++ b/10.Modules/10.4 super and self/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "super_and_self" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/10.Modules/10.4 super and self/src/main.rs b/10.Modules/10.4 super and self/src/main.rs new file mode 100644 index 0000000..64b508b --- /dev/null +++ b/10.Modules/10.4 super and self/src/main.rs @@ -0,0 +1,55 @@ +//! +//! `super` 和 `self` 关键字 +//! +//! 这两个关键字可以让硬编码的模块路径写成相对的路径关系。 +//! +fn function() { + println!("called `function()`"); +} + +mod cool { + pub fn function() { + println!("called `cool::function()`"); + } +} + +mod my { + fn function() { + println!("called `my::function()`"); + } + + mod cool { + pub fn function() { + println!("called `my::cool::function()`"); + } + } + + pub fn indirect_call() { + // 在当前作用域中尝试访问所有的 `function` 函数! + print!("called `my::indirect_call()`, that\n> "); + + // `self` 关键字明确的指出,我们要访问的作用域是当前的模块。 + // 所以 `self::function()` 指明了我们调用的函数是当前模块中定义的函数。 + self::function(); + + // 如果没有指明作用域,那么作用域等同于 `self`。 + function(); + + // 可以使用 `self` 关键字来明确的指出,我们访问的是当前模块下定义的 `my` 子模块。 + // `self` 关键字是可以省略的,因为当不指明作用域的时候等同于 `self`。 + self::cool::function(); + + // `super` 关键字明确的指明了我们需要访问的是父模块中的方法,也就是当前的 `my` 模块的上一级。 + super::function(); + + // 还可以通过 `crate` 特殊的作用域来重新从当前的包的根作用域下重新指定一个完整的路径。 + { + use crate::cool::function as root_function; + root_function(); + } + } +} + +fn main() { + my::indirect_call(); +} diff --git a/10.Modules/10.5 File hierarchy/Cargo.lock b/10.Modules/10.5 File hierarchy/Cargo.lock new file mode 100644 index 0000000..986093e --- /dev/null +++ b/10.Modules/10.5 File hierarchy/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "file_hierarchy" +version = "0.1.0" diff --git a/10.Modules/10.5 File hierarchy/Cargo.toml b/10.Modules/10.5 File hierarchy/Cargo.toml new file mode 100644 index 0000000..a335d96 --- /dev/null +++ b/10.Modules/10.5 File hierarchy/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "file_hierarchy" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/10.Modules/10.5 File hierarchy/src/main.rs b/10.Modules/10.5 File hierarchy/src/main.rs new file mode 100644 index 0000000..321058d --- /dev/null +++ b/10.Modules/10.5 File hierarchy/src/main.rs @@ -0,0 +1,28 @@ +//! +//! 通过文件结构组织模块 +//! +//! Rust 的模块可以按照文件的结构来组织, +//! 目录会当做一个子模块的查找路径。 +//! + +// 这个定义会让 `Rust` 去尝试查找 `my.rs` 或者 `my/mod.rs` 这个文件,并把该文件当做一个模块。 +// `my` 模块的嵌套模块可以创建一个 `my` 的目录,把子模块放进去就可以了。 +mod my; + +fn function() { + println!("called `function()`"); +} + +fn main() { + // 调用 `my` 模块中的方法。 + my::function(); + + // 调用全局作用域下的方法。 + function(); + + // 再次调用 `my` 模块中的方法。 + my::indirect_access(); + + // 调用 `my` 模块中嵌套的子模块的方法。 + my::nested::function(); +} diff --git a/10.Modules/10.5 File hierarchy/src/my.rs b/10.Modules/10.5 File hierarchy/src/my.rs new file mode 100644 index 0000000..aaf7bd0 --- /dev/null +++ b/10.Modules/10.5 File hierarchy/src/my.rs @@ -0,0 +1,21 @@ +// 把 `inaccessible.rs` 或 `inaccessible/mod.rs` 当做一个子模块引用进来,但是该模块对外不可见。 +mod inaccessible; +// 把 `nested.rs` 或 `nested/mod.rs` 当做一个子模块引用进来,并且对外公开该模块。 +pub mod nested; + +// 定义公开方法 +pub fn function() { + println!("called `my::function()`"); +} + +// 私有方法 +fn private_function() { + println!("called `my::private_function()`"); +} + +// 公开方法中引用私有方法。 +pub fn indirect_access() { + print!("called `my::indirect_access()`, that\n> "); + + private_function(); +} diff --git a/10.Modules/10.5 File hierarchy/src/my/inaccessible.rs b/10.Modules/10.5 File hierarchy/src/my/inaccessible.rs new file mode 100644 index 0000000..08e7722 --- /dev/null +++ b/10.Modules/10.5 File hierarchy/src/my/inaccessible.rs @@ -0,0 +1,5 @@ +// 定义公开方法 +#[allow(dead_code)] +pub fn public_function() { + println!("called `my::inaccessible::public_function()`"); +} diff --git a/10.Modules/10.5 File hierarchy/src/my/nested.rs b/10.Modules/10.5 File hierarchy/src/my/nested.rs new file mode 100644 index 0000000..7125347 --- /dev/null +++ b/10.Modules/10.5 File hierarchy/src/my/nested.rs @@ -0,0 +1,10 @@ +// 公开发方法 +pub fn function() { + println!("called `my::nested::function()`"); +} + +// 私有方法 +#[allow(dead_code)] // 这个是为了禁用未使用的警告,因为该函数是私有的,但是又没有任何地方访问它。 +fn private_function() { + println!("called `my::nested::private_function()`"); +} diff --git a/11.Crates/rary.rs b/11.Crates/rary.rs new file mode 100644 index 0000000..38cafdb --- /dev/null +++ b/11.Crates/rary.rs @@ -0,0 +1,31 @@ +//! +//! `crate(包)` 是一个 Rust 的编译单元,不管什么时候使用 `rustc some_file.rs`, +//! 都会把输入的文件 `some_files.rs` 当做一个 `crate(包)`, +//! 如果输入的文件中有 `mod` 关键字,则会尝试把对应的声明文件的内容插入到 `mod` 关键字中, +//! 当所有的 `mod` 关键字都处理完了以后,编译器才开始进行编译, +//! +//! 也就是说单独的模块是不能进行编译的,只有 `crate(包)` 才能进行编译。 +//! +//! 一个 `crate(包)` 可以编译成可执行的二进制文件也可以编译成一个库(library)文件, +//! 默认情况下 `rustc` 会把 `crate(包)` 编译成可执行的二进制文件,可以通过额外的 +//! 命令行参数 `--crate-type` 参数指定为 `lib` 来修改这个行为。 +//! + +// 创建一个简单的库(library) +// 然后使用 `rustc --crate-type lib rary.rs` 编译成一个库, +// 编译完成后会自动生成一个 `library.rlib` 的文件,该文件就是生成好的库文件, +// 编译输出的文件名可以通过 `--crate-name` 来指定。 + +pub fn public_function() { + println!("called rary's `public_function()`"); +} + +fn private_function() { + println!("called rary's `private_function()`"); +} + +pub fn indirect_access() { + print!("called rary's `indirect_access()`, that\n> "); + + private_function(); +} diff --git a/11.Crates/using_library.rs b/11.Crates/using_library.rs new file mode 100644 index 0000000..8b8b0fd --- /dev/null +++ b/11.Crates/using_library.rs @@ -0,0 +1,20 @@ +//! +//! 使用库文件 +//! +//! 想要让包连接到一个库,需要使用 rustc 的 --extern 的参数来指定库名称, +//! 比如 `rustc using_library.rs --extern rary=library.rlib`, +//! 通过参数指定的库会绑定通过指定的名字当做一个模块导入到当前做的作用域中。 +//! 编译以后会生成一个 `using_library` 的二进制可执行文件。 +//! + +// Rust 2015版本之前需要明确的导入需要使用的外部库 +// extern crate rary; + +fn main() { + rary::public_function(); + + // 错误!`private_function` 是私有函数。 + //rary::private_function(); + + rary::indirect_access(); +} diff --git a/12.Cargo/12.1 Dependencies/Cargo.lock b/12.Cargo/12.1 Dependencies/Cargo.lock new file mode 100644 index 0000000..befd478 --- /dev/null +++ b/12.Cargo/12.1 Dependencies/Cargo.lock @@ -0,0 +1,169 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "anstream" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d664a92ecae85fd0a7392615844904654d1d5f5514837f471ddef4a057aba1b6" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" + +[[package]] +name = "anstyle-parse" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +dependencies = [ + "anstyle", + "windows-sys", +] + +[[package]] +name = "clap" +version = "4.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfaff671f6b22ca62406885ece523383b9b64022e341e53e009a62ebc47a45f2" +dependencies = [ + "clap_builder", +] + +[[package]] +name = "clap_builder" +version = "4.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a216b506622bb1d316cd51328dce24e07bdff4a6128a47c7e7fad11878d5adbb" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_lex" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" + +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + +[[package]] +name = "dependencies" +version = "0.1.0" +dependencies = [ + "clap", +] + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" diff --git a/12.Cargo/12.1 Dependencies/Cargo.toml b/12.Cargo/12.1 Dependencies/Cargo.toml new file mode 100644 index 0000000..e747bb0 --- /dev/null +++ b/12.Cargo/12.1 Dependencies/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "dependencies" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +clap = "4.4.11" diff --git a/12.Cargo/12.1 Dependencies/src/main.rs b/12.Cargo/12.1 Dependencies/src/main.rs new file mode 100644 index 0000000..4ec89cc --- /dev/null +++ b/12.Cargo/12.1 Dependencies/src/main.rs @@ -0,0 +1,70 @@ +//! +//! `cargo` 是官方提供的一个包管理工具, +//! 包含了非常多特性的可以提升代码的质量和开发效率 +//! +//! 包含的特性如下 +//! - 通过 `crates.io` (官方维护的包注册库)来管理管理包的集成和依赖管理 +//! - 内置单元测试 +//! - 内置基准测试 +//! + +//! +//! 大多数的程序都会使用外部的库,如果你曾经手动管理过依赖的话,肯定会知道手动管理依赖是非常困难的事情。 +//! `Rust` 的生态系统包含了很多标准的库,可以通过 `cargo` 来管理工程。 +//! +//! 通过 `cargo` 创建工程 +//! `cargo new foo` 创建一个可行文件的工程 +//! +//! 通过 `cargo` 创建库 +//! `cargo new --lib bar` 创建一个库 +//! +//! 创建完以后会自动生成一个目录,目录结构如下 +//! +//! ```sh +//! . +//! ├── bar +//! │ ├── Cargo.toml // 当前工程的配置文件 +//! │ └── src +//! │ └── lib.rs // 库的入口文件 +//! └── foo +//! ├── Cargo.toml +//! └── src +//! └── main.rs // 可执行文件的入口文件 +//! +//! ``` +//! +//! `Cargo.toml` 文件内容如下 +//! ```toml +//! [package] +//! name = "foo" +//! version = "0.1.0" +//! authors = ["mark"] + +//! [dependencies] +//! ``` +//! +//! `[package]` 下面的 `name` 表示当前工程的名字,这个名字就是发布到 `crates.io` 上面的名字, +//! 并且该名字还是输出的二进制文件名。 +//! `version` 是一个语义化的版本号。 +//! `authors` 是当前的用户名,也是将来发布到 `crates.io` 上面的以后使用的名字。 +//! +//! `[dependencies]` 就是当前工程所需要的依赖项了,这些依赖项都会自动从 `crates.io` 上面下载。 +//! 你可以在 `creates.io` 上面找到你所需要的依赖包,这里使用 `clap` 举例子,这个包现在最新的版本是 `4.4.11` +//! 我们可以在 `[dependencies]` 下添加 `clap = "4.4.11"`,这样我们就可以在工程中使用 `clap` 了。 +//! +//! `[dependencies]` 还支持更多语法,常用的有下面几种 +//! +//! ```toml +//! clap = "2.27.1" # 从 `crates.io` 上面下载 +//! rand = { git = "https://github.com/rust-lang-nursery/rand" } # 从指定的 `git` 仓库中下载 +//! bar = { path = "../bar" } # 使用本地文件目录 +//! ``` +//! +//! 我们可以在工程的任意目录中使用 `cargo build` 来构建工程,或者使用 `cargo run` 来直接运行工程。 +//! 这两个命令都会自动的去下载工程中所需要的依赖项。 +//! +//! + +fn main() { + println!("Hello, world!"); +} diff --git a/12.Cargo/12.2 Conventions/Cargo.lock b/12.Cargo/12.2 Conventions/Cargo.lock new file mode 100644 index 0000000..9fb6be0 --- /dev/null +++ b/12.Cargo/12.2 Conventions/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "conventions" +version = "0.1.0" diff --git a/12.Cargo/12.2 Conventions/Cargo.toml b/12.Cargo/12.2 Conventions/Cargo.toml new file mode 100644 index 0000000..2a5fc6c --- /dev/null +++ b/12.Cargo/12.2 Conventions/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "conventions" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/12.Cargo/12.2 Conventions/src/bin/my_other_bin.rs b/12.Cargo/12.2 Conventions/src/bin/my_other_bin.rs new file mode 100644 index 0000000..17a6c70 --- /dev/null +++ b/12.Cargo/12.2 Conventions/src/bin/my_other_bin.rs @@ -0,0 +1,4 @@ +// 另外一个二进制文件 +fn main() { + println!("other bin file"); +} diff --git a/12.Cargo/12.2 Conventions/src/main.rs b/12.Cargo/12.2 Conventions/src/main.rs new file mode 100644 index 0000000..f5da5bc --- /dev/null +++ b/12.Cargo/12.2 Conventions/src/main.rs @@ -0,0 +1,11 @@ +//! 默认约定 +//! +//! 默认情况下 `cargo` 编译工程只会把 `src/main.rs` 编译成为一个可执行文件, +//! 如果一个工程输出多个可执行文件应该怎么做呢? +//! +//! `cargo` 会把 `src/bin/` 目录下的所有文件都会额外的多生成一个可执行文件。 +//! + +fn main() { + println!("Hello, world!"); +} diff --git a/12.Cargo/12.3 Testing/Cargo.lock b/12.Cargo/12.3 Testing/Cargo.lock new file mode 100644 index 0000000..aa37fc3 --- /dev/null +++ b/12.Cargo/12.3 Testing/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "testing" +version = "0.1.0" diff --git a/12.Cargo/12.3 Testing/Cargo.toml b/12.Cargo/12.3 Testing/Cargo.toml new file mode 100644 index 0000000..2b5df64 --- /dev/null +++ b/12.Cargo/12.3 Testing/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "testing" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/12.Cargo/12.3 Testing/src/main.rs b/12.Cargo/12.3 Testing/src/main.rs new file mode 100644 index 0000000..af68d3d --- /dev/null +++ b/12.Cargo/12.3 Testing/src/main.rs @@ -0,0 +1,98 @@ +//! +//! 集成测试和单元测试 +//! +//! 对于任何软件都一样,集成测试和单元测试都是非常重要的一环,可以用来保证软件的质量。 +//! `Rust` 中对于单元测试和集成测试是第一优先级支持的事情。 +//! +//! 对于单元测试一般都会直接放在模块中,而集成测试则会放在根目录下的 `tests` 目录中。 +//! +//! 文件结构如下 +//! +//! ```sh +//! foo +//! ├── Cargo.toml +//! ├── src +//! │ └── main.rs +//! │ └── lib.rs +//! └── tests +//! ├── my_test.rs +//! └── my_other_test.rs +//! ``` +//! +//! 可以使用 `cargo tests` 来执行整个工程的测试,该命令会先执行`单元测试`,通过了以后会执行 `集成测试`。 +//! 还可以使用额外的参数来指定执行某些测试 `cargo test test_foo`,该命令指只会执行匹配 `test_foo` 的测试代码。 +//! +//! `cargo` 运行测试的时候是并行的,所以需要注意一点的是测试的代码不能出现竞争关系。 +//! +fn main() { + println!("Hello, world!"); +} + +/// 可能会出现竞争关系的测试代码。 +/// 这个测试运行完成以后,文件的内容预期是 +/// ```text +/// Ferris +/// Ferris +/// Ferris +/// Ferris +/// Ferris +/// Corro +/// Corro +/// Corro +/// Corro +/// Corro +/// ``` +/// +/// 但是实际上可能是这样的 +/// ```text +/// Corro +/// Ferris +/// Corro +/// Ferris +/// Corro +/// Ferris +/// Corro +/// Ferris +/// Corro +/// Ferris +/// ``` +#[cfg(test)] +mod tests { + // 导入使用的模块 + use std::fs::OpenOptions; + use std::io::Write; + + // 写文件 + #[test] + fn test_file() { + // 打开 `ferris.txt` 文件,如果文件不存在则创建文件。 + let mut file = OpenOptions::new() + .append(true) + .create(true) + .open("ferris.txt") + .expect("Failed to open ferris.txt"); + + // 向文件中写入5次 `Ferris` + for _ in 0..5 { + file.write_all("Ferris\n".as_bytes()) + .expect("Could not write to ferris.txt"); + } + } + + // 写上一个测试同一个文件 + #[test] + fn test_file_also() { + // 同上 + let mut file = OpenOptions::new() + .append(true) + .create(true) + .open("ferris.txt") + .expect("Failed to open ferris.txt"); + + // 向文件中写入5次 `Corro` + for _ in 0..5 { + file.write_all("Corro\n".as_bytes()) + .expect("Could not write to ferris.txt"); + } + } +} diff --git a/12.Cargo/12.4 Build Scripts/Cargo.lock b/12.Cargo/12.4 Build Scripts/Cargo.lock new file mode 100644 index 0000000..281a3ac --- /dev/null +++ b/12.Cargo/12.4 Build Scripts/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "build_scripts" +version = "0.1.0" diff --git a/12.Cargo/12.4 Build Scripts/Cargo.toml b/12.Cargo/12.4 Build Scripts/Cargo.toml new file mode 100644 index 0000000..4e2589c --- /dev/null +++ b/12.Cargo/12.4 Build Scripts/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "build_scripts" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/12.Cargo/12.4 Build Scripts/src/main.rs b/12.Cargo/12.4 Build Scripts/src/main.rs new file mode 100644 index 0000000..c5d07ae --- /dev/null +++ b/12.Cargo/12.4 Build Scripts/src/main.rs @@ -0,0 +1,23 @@ +//! +//! 构建脚本 +//! 有些时候仅仅使用 `cargo build` 是不够的,有可能你依赖了一些其他的东西, +//! 库或者需要动态生成一些代码,或者需要预编译一些其他的代码,才能让工程能正常编译。 +//! +//! 所以 `cargo` 提供了一个构建脚本的能力,可以通过构建脚本来让 `cargo` 在开始编译 +//! 工程以前先执行某些特定的操作。 +//! +//! 你可以在 `Cargo.toml` 文件的 `[package]` 中添加一个 `build = "build.rs"` +//! 属性来指定执行 `build.rs`,来做一些其他的操作,如果没有指定这个字段的话, +//! `cargo` 会默认使用项目根目录下的 `build.rs` 文件。 +//! +//! 构建脚本和其他的 `Rust` 代码一样,只不过 `cargo` 会在工程编译之前先执行构建脚本。 +//! +//! 你可以在构建脚本中使用一些 `cargo` 预定义好的环境变量,这些变量可以在[这里](https://doc.rust-lang.org/cargo/reference/environment-variables.html#environment-variables-cargo-sets-for-build-scripts)找到 +//! 构建脚本在执行过程中输出的内容可以在 `target/debug/build//output` 中找到。 +//! 输出的内容中使用 `cargo:` 开头的内容会被 `cargo` 直接解析,通过这些命令可以定义 `cargo` 的一些行为。 +//! +//! 完整的指令列表可以在[这里](https://doc.rust-lang.org/cargo/reference/build-scripts.html)找到 +//! +fn main() { + println!("Hello, world!"); +} diff --git a/13.Attributes/13 Attributes/Cargo.lock b/13.Attributes/13 Attributes/Cargo.lock new file mode 100644 index 0000000..689e00e --- /dev/null +++ b/13.Attributes/13 Attributes/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "attributes" +version = "0.1.0" diff --git a/13.Attributes/13 Attributes/Cargo.toml b/13.Attributes/13 Attributes/Cargo.toml new file mode 100644 index 0000000..9ed643a --- /dev/null +++ b/13.Attributes/13 Attributes/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "attributes" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/13.Attributes/13 Attributes/src/main.rs b/13.Attributes/13 Attributes/src/main.rs new file mode 100644 index 0000000..178c43c --- /dev/null +++ b/13.Attributes/13 Attributes/src/main.rs @@ -0,0 +1,30 @@ +//! +//! 属性是一个元数据,可以使用在 模块、包、等等,这些元数据可以实现以下的功能 +//! +//! - 条件编译 +//! - 设置包名称,版本和类型 +//! - 禁止语法检查和警告 +//! - 启用编译器的某些特性 +//! - 引用外部的库 +//! - 标记函数是单元测试 +//! - 标记函数是基准测试的一部分 +//! - 类似宏的属性 +//! +//! 如果一个属性的生效范围是整个包(crate)的时候语法是 `#![crate_attribute]`, +//! 如果只是指定的某个函数或模块等等的时候语法是 `#[item_attribute]`,没有 `!` 符号。 +//! +//! 属性还可以接收参数,下面的几种语法都代表属性接收参数。 +//! +//! - `#[attribute = "value"]` +//! - `#[attribute(key = "value")]` +//! - `#[attribute(value)]` +//! +//! 属性可以接收多个参数,如下所示 +//! +//! - `#[attribute(value, value2)]` +//! - `#[attribute(value, value2, value3 +//! value4, value5)]` +//! +fn main() { + println!("Hello, world!"); +} diff --git a/13.Attributes/13.1 dead_code/Cargo.lock b/13.Attributes/13.1 dead_code/Cargo.lock new file mode 100644 index 0000000..6d46dd0 --- /dev/null +++ b/13.Attributes/13.1 dead_code/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "dead_code" +version = "0.1.0" diff --git a/13.Attributes/13.1 dead_code/Cargo.toml b/13.Attributes/13.1 dead_code/Cargo.toml new file mode 100644 index 0000000..ed32b36 --- /dev/null +++ b/13.Attributes/13.1 dead_code/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "dead_code" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/13.Attributes/13.1 dead_code/src/main.rs b/13.Attributes/13.1 dead_code/src/main.rs new file mode 100644 index 0000000..ebd9757 --- /dev/null +++ b/13.Attributes/13.1 dead_code/src/main.rs @@ -0,0 +1,19 @@ +//! 死代码警告 +//! 编译器会在编译的过程中对没有使用的代码打印警告, +//! 我们可以使用编译器提供的 `dead_code` 属性来禁用警告, +//! +//! 在真实的工程中,你应该解决死代码的问题,而不是使用属性来禁用警告!!! +//! + +fn used_function() {} + +// `#[allow(dead_code)]` 属性可以禁用掉 `dead_code` 的代码检查 +#[allow(dead_code)] +fn unused_function() {} + +fn noisy_unused_function() {} +// FIXME ^ 尝试添加属性来禁用警告 + +fn main() { + used_function(); +} diff --git a/13.Attributes/13.2 Crates/main.rs b/13.Attributes/13.2 Crates/main.rs new file mode 100644 index 0000000..fa7d651 --- /dev/null +++ b/13.Attributes/13.2 Crates/main.rs @@ -0,0 +1,25 @@ +//! +//! 属性定义还可以额外指定包的属性,比如说包名称,包的类型。 +//! + +// 通过属性指明当前的包是一个库 +#![crate_type = "lib"] +// 通过属性指明当前的包的名称 +#![crate_name = "rary"] + +// 上面两个属性声明了当前的包的名称和类型, +// 这样使用 `rustc` 编译的时候就不需要手动指明类型和名称了。 + +pub fn public_function() { + println!("called rary's `public_function()`"); +} + +fn private_function() { + println!("called rary's `private_function()`"); +} + +pub fn indirect_access() { + print!("called rary's `indirect_access()`, that\n> "); + + private_function(); +} diff --git a/13.Attributes/13.3 cfg/Cargo.lock b/13.Attributes/13.3 cfg/Cargo.lock new file mode 100644 index 0000000..eec3a1f --- /dev/null +++ b/13.Attributes/13.3 cfg/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "cfg" +version = "0.1.0" diff --git a/13.Attributes/13.3 cfg/Cargo.toml b/13.Attributes/13.3 cfg/Cargo.toml new file mode 100644 index 0000000..a45f9b3 --- /dev/null +++ b/13.Attributes/13.3 cfg/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "cfg" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/13.Attributes/13.3 cfg/src/main.rs b/13.Attributes/13.3 cfg/src/main.rs new file mode 100644 index 0000000..d492e71 --- /dev/null +++ b/13.Attributes/13.3 cfg/src/main.rs @@ -0,0 +1,38 @@ +//! `cfg` 属性和宏 +//! +//! `cfg` 是一个条件属性,当条件成立的时候才会生效,常用的两种形式如下。 +//! +//! - `cfg` 当做属性来使用:`#[cfg(...)]` 指定的位置 +//! - `cfg` 当做条件计算来用:`cfg!(...)` 条件表达式 +//! +//! 当做属性来使用的时候是在编译阶段执行的,当做条件表达式的时候是在运行时执行的。 +//! 两种形式都接受相同的参数类型。 +//! +//! `cfg!` 宏不像是 `#[cfg]`在编译阶段直接移除掉了条件为 `false` 的代码, +//! 而是保留了所有的代码在运行时执行判断。 +//! + +// 这个函数只会在 linux 系统下才会被编译到可执行文件中 +#[cfg(target_os = "linux")] +fn are_you_on_linux() { + println!("You are running linux!"); +} + +// 这个函数会在不是 linux 系统的任意系统下都会编译到可执行文件中 +#[cfg(not(target_os = "linux"))] +fn are_you_on_linux() { + println!("You are *not* running linux!"); +} + +fn main() { + are_you_on_linux(); + + println!("Are you sure?"); + + // 不管编译的系统是什么,条件分支的代码都会被编译到可执行文件中 + if cfg!(target_os = "linux") { + println!("Yes. It's definitely linux!"); + } else { + println!("Yes. It's definitely *not* linux!"); + } +} diff --git a/13.Attributes/13.4 Custom/custom b/13.Attributes/13.4 Custom/custom new file mode 100755 index 0000000000000000000000000000000000000000..d0d82a679fb673c1c4a04e140bf738db1d8417dc GIT binary patch literal 514040 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 (T可以是任意的名称)来声明接收泛型类型,泛型类型需要使用大驼峰命名 ``, +//! 如果一个函数声明了泛型参数,并且参数指明使用了泛型中声明的类型,则该函数就是泛型函数, +//! 没有使用泛型声明的参数则是具体类型。 +//! +//! 下面这个就是一个泛型的函数 +//! ```r +//! fn foo(arg: T) { ... } +//! ``` +//! 该函数定义了一个泛型 `T`,声明参数 `arg` 为泛型 `T`。 +//! 这个函数可以接受任意类型的参数。 +//! + +// 一个具体类型 `A` +struct A; + +// 定义一个类型 `Single`,该类型拥有一个元组(Tuple),这个元组里面有一个类型 `A` (这个 `A` 类型就是上面定义的类型) +struct Single(A); +// ^ 这里定义元组内只包含一个 `A` 类型 + +// 这里声明了一个泛型 ``,表明 `SingleGen` 类型是一个泛型的类型, +// 然后这个泛型 `T`,放在了元组中。 +// 这里泛型 `` 中的 `T` 可以是任意的类型,包含上面定义的 `A` +struct SingleGen(T); + +fn main() { + // `Single` 类型需要一个类型 `A`,因为 `Single` 是具体类型的类型,不是泛型。 + let _s = Single(A); + + // 创建一个变量 `_char` 明确指明类型是 `SingleGen`, + // 这里通过 `SingleGen('a')` 明确的向泛型传递了一个 `char` 型的参数。 + let _char: SingleGen = SingleGen('a'); + + // `SingleGen` 也可以使用任意的其他类型,泛型可以自动根据参数推断具体的类型。 + let _t = SingleGen(A); // `A` 是上面定义的类型。 + let _i32 = SingleGen(6); // 使用 `i32` 类型。 + let _char = SingleGen('a'); // 使用 `char` 类型。 +} diff --git a/14.Generics/14.1 Functions/Cargo.lock b/14.Generics/14.1 Functions/Cargo.lock new file mode 100644 index 0000000..82f83a1 --- /dev/null +++ b/14.Generics/14.1 Functions/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "functions" +version = "0.1.0" diff --git a/14.Generics/14.1 Functions/Cargo.toml b/14.Generics/14.1 Functions/Cargo.toml new file mode 100644 index 0000000..a9b5578 --- /dev/null +++ b/14.Generics/14.1 Functions/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "functions" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/14.Generics/14.1 Functions/src/main.rs b/14.Generics/14.1 Functions/src/main.rs new file mode 100644 index 0000000..71efcc0 --- /dev/null +++ b/14.Generics/14.1 Functions/src/main.rs @@ -0,0 +1,41 @@ +//! +//! 泛型函数 +//! +//! 泛型的相关规则也可以直接使用在函数上,当一个类型 `T` 被声明成了 ``,则该类型就是泛型。 +//! +//! 如果编译器不能推断出泛型的参数或者泛型的返回值的情况下,需要明确的指出泛型的类型。 +//! + +struct A; // 具体类型 `A` +struct S(A); // 具体类型 `S` +struct SGen(T); // 泛型类型 `SGen`. + +// 下面这些函数都会直接转移变量的所有权,一旦调用了函数,变量就被转移到函数中了,而函数中什么都没做 +// 当函数结束的时候会直接回收掉所有传入的参数。 + +// `reg_fn` 函数接受一个具体的类型 `S`,所以该函数不是泛型的。 +fn reg_fn(_s: S) {} + +// `gen_spec_t` 函数接受一个 `SGen`,虽然 `SGen` 是泛型, +// 但是我们手动指定了 `SGen` 的类型为 `A`,所以该函数也不是泛型的 +fn gen_spec_t(_s: SGen) {} + +// 这里同上,因为手动指定了 `SGen` 的类型是 `i32` 所以该函数也不是泛型的。 +fn gen_spec_i32(_s: SGen) {} + +// `generic` 函数通过 声明了一个泛型 `T` 的类型,然后把这个泛型 `T`,传递给了 `SGen`, +// 所以该函数是一个拥有一个泛型类型的泛型函数。 +fn generic(_s: SGen) {} + +fn main() { + // 使用非泛型的函数 + reg_fn(S(A)); // 具体类型 + gen_spec_t(SGen(A)); // 隐式指定 `SGen` 的泛型类型为 `A`。 + gen_spec_i32(SGen(6)); // 隐式指定 `SGen` 的泛型类型为 `i32`。 + + // 手动明确指定函数的泛型类型为 `char` 类型 + generic::(SGen('a')); + + // 隐式指定泛型类型为 `char` 类型 + generic(SGen('c')); +} diff --git a/14.Generics/14.2 Implementation/Cargo.lock b/14.Generics/14.2 Implementation/Cargo.lock new file mode 100644 index 0000000..010f4b3 --- /dev/null +++ b/14.Generics/14.2 Implementation/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "implementation" +version = "0.1.0" diff --git a/14.Generics/14.2 Implementation/Cargo.toml b/14.Generics/14.2 Implementation/Cargo.toml new file mode 100644 index 0000000..a854576 --- /dev/null +++ b/14.Generics/14.2 Implementation/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "implementation" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/14.Generics/14.2 Implementation/src/main.rs b/14.Generics/14.2 Implementation/src/main.rs new file mode 100644 index 0000000..45d8e43 --- /dev/null +++ b/14.Generics/14.2 Implementation/src/main.rs @@ -0,0 +1,45 @@ +//! +//! 泛型实现(implementation) +//! +//! 和函数类似,实现也可以使用泛型 +//! +//! ``` +//! struct S; // 具体类型 `S` +//! struct GenericVal(T); // 泛型 `GenericVal` +// +//! // 使用具体类型实现 GenericVal 类型 +//! impl GenericVal {} // 对于 `f32` 类型的实现 +//! impl GenericVal {} // 对于 `S` 类型的实现 +//! +//! // `` 继续保持示范性,也就是任意类型的实现 +//! impl GenericVal {} +//! ``` +//! +struct Val { + val: f64, +} + +struct GenVal { + gen_val: T, +} + +// 具体类型的实现 +impl Val { + fn value(&self) -> &f64 { + &self.val + } +} + +// 泛型类型对于任意的类型的实现 +impl GenVal { + fn value(&self) -> &T { + &self.gen_val + } +} + +fn main() { + let x = Val { val: 3.0 }; + let y = GenVal { gen_val: 3i32 }; + + println!("{}, {}", x.value(), y.value()); +} diff --git a/14.Generics/14.3 Traits/Cargo.lock b/14.Generics/14.3 Traits/Cargo.lock new file mode 100644 index 0000000..0b7d36b --- /dev/null +++ b/14.Generics/14.3 Traits/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "traits" +version = "0.1.0" diff --git a/14.Generics/14.3 Traits/Cargo.toml b/14.Generics/14.3 Traits/Cargo.toml new file mode 100644 index 0000000..460f45f --- /dev/null +++ b/14.Generics/14.3 Traits/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "traits" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/14.Generics/14.3 Traits/src/main.rs b/14.Generics/14.3 Traits/src/main.rs new file mode 100644 index 0000000..8cb50c4 --- /dev/null +++ b/14.Generics/14.3 Traits/src/main.rs @@ -0,0 +1,34 @@ +//! +//! 泛型特性 (trait) +//! +//! 特性也可以是泛型的,下面是一个泛型特性的示例。 +//! + +struct Empty; +struct Null; + +// 定义一个泛型的特性 +trait DoubleDrop { + // 函数会转移实例的所有权,并且接收的参数也会转移所有权, + // 当函数执行以后,会自动移除实例和传入的参数 + fn double_drop(self, _: T); +} + +// 声明两个泛型类型 `T`、`U`,然后为泛型 `U` 实现上面定义的泛型 `DoubleDrop` 特性 +// 因为泛型 `T` 和 `U` 都没有明确的类型也就是可以是任意的类型,也就是说这个实现会对所有的类型都生效!!! +impl DoubleDrop for U { + // 该函数转移实例和参数的所有权,然后直接丢弃,这样就实现了 `drop` 的功能。 + fn double_drop(self, _: T) {} +} + +fn main() { + let empty = Empty; + let null = Null; + + // 丢弃了 `empty` 和 `null` 两个实例。 + empty.double_drop(null); + + // empty; + // null; + // ^ TODO: 尝试移除注释 +} diff --git a/14.Generics/14.4 Bounds/Cargo.lock b/14.Generics/14.4 Bounds/Cargo.lock new file mode 100644 index 0000000..ccf6e84 --- /dev/null +++ b/14.Generics/14.4 Bounds/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "bounds" +version = "0.1.0" diff --git a/14.Generics/14.4 Bounds/Cargo.toml b/14.Generics/14.4 Bounds/Cargo.toml new file mode 100644 index 0000000..171166b --- /dev/null +++ b/14.Generics/14.4 Bounds/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "bounds" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/14.Generics/14.4 Bounds/src/main.rs b/14.Generics/14.4 Bounds/src/main.rs new file mode 100644 index 0000000..a8d66b3 --- /dev/null +++ b/14.Generics/14.4 Bounds/src/main.rs @@ -0,0 +1,112 @@ +//! +//! 泛型约束(Bounds) +//! +//! 再使用泛型的时候,很多时候都会需要要求泛型必须拥有哪些特性,如果不能满足的话不能使用该函数, +//! 所有就有了泛型的约束,要求传递的参数必须实现某些特定的特性。 +//! + +fn example01() { + use std::fmt::Display; + + // 该函数定义了一个泛型类型 `T`,并且约束该类型必须实现要先实现 `Display` 特性。 + fn printer(t: T) { + println!("{}", t); + } + + struct S(T); + + // 错误! `Vec` 没有实现 `Display` 特性 + // let s = S(vec![1]); + // 移除注释查看错误 +} + +// 导入格式化标签 `{:?}` 必须要实现的特性。 +use std::fmt::Debug; + +trait HasArea { + fn area(&self) -> f64; +} + +impl HasArea for Rectangle { + fn area(&self) -> f64 { + self.length * self.height + } +} + +#[derive(Debug)] +struct Rectangle { + length: f64, + height: f64, +} +#[allow(dead_code)] +struct Triangle { + length: f64, + height: f64, +} + +// 泛型 `T` 必须实现 `Debug` 特性 +fn print_debug(t: &T) { + println!("{:?}", t); +} + +// 泛型 `T` 必须实现 `HasArea` 特性,只有实现了这个特性才能使用 `HasArea` 上的 `area` 方法。 +fn area(t: &T) -> f64 +where + // 另外一种泛型约束的语法,这样可以保持函数签名是干净的 + T: HasArea, +{ + t.area() +} + +/// 即使是空的特性也可以用作约束,就像是标准库提供的 `Copy`、`Eq` 一样 +fn testcase_empty_bounds() { + struct Cardinal; + struct BlueJay; + struct Turkey; + + trait Red {} + trait Blue {} + + impl Red for Cardinal {} + impl Blue for BlueJay {} + + // 这个函数只允许实现了 `Red` 特性的参数调用。 + fn red(_: &T) -> &'static str { + "red" + } + + // 这个函数只允许实现了 `Blue` 特性的参数调用。 + fn blue(_: &T) -> &'static str { + "blue" + } + + let cardinal = Cardinal; + let blue_jay = BlueJay; + let _turkey = Turkey; + + // `red()` 不能传递 `blue_jay`,因为函数进行了约束,反过来也一样。 + println!("A cardinal is {}", red(&cardinal)); + println!("A blue jay is {}", blue(&blue_jay)); + + // println!("A turkey is {}", red(&_turkey)); + // ^ TODO: 移除注释查看错误 +} + +fn main() { + let rectangle = Rectangle { + length: 3.0, + height: 4.0, + }; + let _triangle = Triangle { + length: 3.0, + height: 4.0, + }; + + print_debug(&rectangle); + println!("Area: {}", area(&rectangle)); + + // print_debug(&_triangle); + // println!("Area: {}", area(&_triangle)); + // ^ TODO: 移除注释查看错误 + // | Error: 这两个都没有实现相关的 `Debug` 或 `HasArea` 特性。 +} diff --git a/14.Generics/14.5 Multiple bounds/Cargo.lock b/14.Generics/14.5 Multiple bounds/Cargo.lock new file mode 100644 index 0000000..4014f2a --- /dev/null +++ b/14.Generics/14.5 Multiple bounds/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "multiple_bounds" +version = "0.1.0" diff --git a/14.Generics/14.5 Multiple bounds/Cargo.toml b/14.Generics/14.5 Multiple bounds/Cargo.toml new file mode 100644 index 0000000..b91a5ea --- /dev/null +++ b/14.Generics/14.5 Multiple bounds/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "multiple_bounds" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/14.Generics/14.5 Multiple bounds/src/main.rs b/14.Generics/14.5 Multiple bounds/src/main.rs new file mode 100644 index 0000000..eb4dc18 --- /dev/null +++ b/14.Generics/14.5 Multiple bounds/src/main.rs @@ -0,0 +1,30 @@ +//! +//! 多重泛型约束 +//! 多重约束可以在每个约束之间使用 `+` 号连接, +//! 多个泛型之间使用 `,` 号间隔 +//! +//! 同样支持在 `` 或者 where `T: bound + bound2` 中使用 +//! +use std::fmt::{Debug, Display}; + +fn compare_prints(t: &T) { + println!("Debug: `{:?}`", t); + println!("Display: `{}`", t); +} + +fn compare_types(t: &T, u: &U) { + println!("t: `{:?}`", t); + println!("u: `{:?}`", u); +} + +fn main() { + let string = "words"; + let array = [1, 2, 3]; + let vec = vec![1, 2, 3]; + + compare_prints(&string); + // compare_prints(&array); + // TODO ^ 移除注释查看错误 + + compare_types(&array, &vec); +} diff --git a/14.Generics/14.6 Where clauses/Cargo.lock b/14.Generics/14.6 Where clauses/Cargo.lock new file mode 100644 index 0000000..d60ba4d --- /dev/null +++ b/14.Generics/14.6 Where clauses/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "where_clauses" +version = "0.1.0" diff --git a/14.Generics/14.6 Where clauses/Cargo.toml b/14.Generics/14.6 Where clauses/Cargo.toml new file mode 100644 index 0000000..26a0c14 --- /dev/null +++ b/14.Generics/14.6 Where clauses/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "where_clauses" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/14.Generics/14.6 Where clauses/src/main.rs b/14.Generics/14.6 Where clauses/src/main.rs new file mode 100644 index 0000000..b4b1979 --- /dev/null +++ b/14.Generics/14.6 Where clauses/src/main.rs @@ -0,0 +1,29 @@ +//! +//! where 子语句 +//! 在声明泛型类型的时候可以通过 `where` 子语句把泛型约束从签名中提取出来, +//! 这样可以让声明看起来更简洁一些,而且 `where` 子语句可以限定任意的类型,而不仅仅是函数参数。 +//! +use std::fmt::Debug; + +trait PrintInOption { + fn print_in_option(self); +} + +// 这里使用 `where` 子语句重新定义了 `T` 类型为 `Option`。 +// +impl PrintInOption for T +where + Option: Debug, // 这里使用了类型的重定义,把 `T` 重新定义成 `Option` 然后对对重定义的类型进行约束 +{ + // 这里的 `self` 就是 `T` 的实例,然后使用 `Some` 包装 `self` 就可以打印了, + // 因为 `Some` 实现了 `Debug` 特性。 + fn print_in_option(self) { + println!("{:?}", Some(self)); + } +} + +fn main() { + let vec = vec![1, 2, 3]; + + vec.print_in_option(); +} diff --git a/14.Generics/14.7 newtype idiom/Cargo.lock b/14.Generics/14.7 newtype idiom/Cargo.lock new file mode 100644 index 0000000..4bd7f49 --- /dev/null +++ b/14.Generics/14.7 newtype idiom/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "new_type_idiom" +version = "0.1.0" diff --git a/14.Generics/14.7 newtype idiom/Cargo.toml b/14.Generics/14.7 newtype idiom/Cargo.toml new file mode 100644 index 0000000..03adeaa --- /dev/null +++ b/14.Generics/14.7 newtype idiom/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "new_type_idiom" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/14.Generics/14.7 newtype idiom/src/main.rs b/14.Generics/14.7 newtype idiom/src/main.rs new file mode 100644 index 0000000..a8b72ab --- /dev/null +++ b/14.Generics/14.7 newtype idiom/src/main.rs @@ -0,0 +1,41 @@ +//! +//! 新类型 (newtype) +//! +//! 新类型是指使用元组结构体包装一个其他的类型,然后基于新包装的类型实现类型的扩展或约束, +//! 这样的好处是可以让 `api` 更加清晰,不会造成歧义。 +//! + +struct Years(i64); + +struct Days(i64); + +impl Years { + pub fn to_days(&self) -> Days { + Days(self.0 * 365) + } +} + +impl Days { + /// 舍弃不足的年份 + pub fn to_years(&self) -> Years { + Years(self.0 / 365) + } +} + +fn old_enough(age: &Years) -> bool { + age.0 >= 18 +} + +fn main() { + let age = Years(5); + let age_days = age.to_days(); + println!("Old enough {}", old_enough(&age)); + println!("Old enough {}", old_enough(&age_days.to_years())); + // println!("Old enough {}", old_enough(&age_days)); + + { + let years = Years(42); + let years_as_primitive_1: i64 = years.0; // 访问元组数据 + let Years(years_as_primitive_2) = years; // 解构元组数据 + } +} diff --git a/14.Generics/14.8 Associated items/Cargo.lock b/14.Generics/14.8 Associated items/Cargo.lock new file mode 100644 index 0000000..9b9b9d3 --- /dev/null +++ b/14.Generics/14.8 Associated items/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "associated_items" +version = "0.1.0" diff --git a/14.Generics/14.8 Associated items/Cargo.toml b/14.Generics/14.8 Associated items/Cargo.toml new file mode 100644 index 0000000..ee928a9 --- /dev/null +++ b/14.Generics/14.8 Associated items/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "associated_items" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/14.Generics/14.8 Associated items/src/main.rs b/14.Generics/14.8 Associated items/src/main.rs new file mode 100644 index 0000000..3fdc1ff --- /dev/null +++ b/14.Generics/14.8 Associated items/src/main.rs @@ -0,0 +1,122 @@ +//! +//! 关联项是指与各种类型的项目有关的一组规则, +//! 他是泛型特征的扩展,允许泛型特征在内部自定义新的项。 +//! +//! 其中有一种成为关联类型,也就是实现特征的时候需要明确指定特征上定义的项的类型。 +//! + +fn the_problem() { + struct Container(i32, i32); + + // 该特性明确要求需要传递 `` 两个泛型类型, + // 还有两个方法可以获取 `first`,`last` 两个值。 + trait Contains { + fn contains(&self, _: &A, _: &B) -> bool; // 明确指明需要泛型 `A`, `B` + fn first(&self) -> i32; // 不需要泛型 `A` 或 `B`. + fn last(&self) -> i32; // 不需要泛型 `A` 或 `B`. + } + + // 明确声明要实现的类型是 `Contains`,这样就代表泛型特性的 `` 就是 `` + impl Contains for Container { + fn contains(&self, number_1: &i32, number_2: &i32) -> bool { + (&self.0 == number_1) && (&self.1 == number_2) + } + + fn first(&self) -> i32 { + self.0 + } + + fn last(&self) -> i32 { + self.1 + } + } + + // 问题是这里的三个泛型的之间的关系, + // 这里 C 被约束为 Contains, 而我们写约束的时候很麻烦。 + fn difference(container: &C) -> i32 + where + C: Contains, + { + container.last() - container.first() + } + + let number_1 = 3; + let number_2 = 10; + + let container = Container(number_1, number_2); + + println!( + "Does container contain {} and {}: {}", + &number_1, + &number_2, + container.contains(&number_1, &number_2) + ); + println!("First number: {}", container.first()); + println!("Last number: {}", container.last()); + + println!("The difference is: {}", difference(&container)); +} + +fn associated_types() { + struct Container(i32, i32); + + // 还是相同的定义,只不过这里不再使用泛型。 + trait Contains { + // 定义两个通用的关联类型 `A`,`B`,这个时候还不知道关联类型的具体类型是什么, + // 具体可能是什么类型是由实现该特性的地方定义的。 + type A; + type B; + + // 这里 `Self::A` 中的 `Self` 实际上是指的 `Contains`,也就是当前的特性。 + // 到实际的实现的时候这个 `Self` 会被替换成实现该特性的实际类型。 + fn contains(&self, _: &Self::A, _: &Self::B) -> bool; + fn first(&self) -> i32; + fn last(&self) -> i32; + } + + impl Contains for Container { + // 明确指定特性中定义的关联类型的具体类型。 + type A = i32; + type B = i32; + + // 这里的 `number_1: &i32, number_2: &i32` 可以被替换成 `number_1: &Self::A, number_2: &Self::B`, + // 因为 `Self` 等同于 `Container` + fn contains(&self, number_1: &i32, number_2: &i32) -> bool { + (&self.0 == number_1) && (&self.1 == number_2) + } + + fn first(&self) -> i32 { + self.0 + } + + fn last(&self) -> i32 { + self.1 + } + } + + // 这里进行约束的时候就不需要额外的声明 `Contains` 特性所需要的两个泛型类型了。 + fn difference(container: &C) -> i32 { + container.last() - container.first() + } + + let number_1 = 3; + let number_2 = 10; + + let container = Container(number_1, number_2); + + println!( + "Does container contain {} and {}: {}", + &number_1, + &number_2, + container.contains(&number_1, &number_2) + ); + println!("First number: {}", container.first()); + println!("Last number: {}", container.last()); + + println!("The difference is: {}", difference(&container)); +} + +fn main() { + the_problem(); + associated_types(); +} diff --git a/14.Generics/14.9 Phantom type parameters/Cargo.lock b/14.Generics/14.9 Phantom type parameters/Cargo.lock new file mode 100644 index 0000000..3aec20c --- /dev/null +++ b/14.Generics/14.9 Phantom type parameters/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "phantom_type_parameters" +version = "0.1.0" diff --git a/14.Generics/14.9 Phantom type parameters/Cargo.toml b/14.Generics/14.9 Phantom type parameters/Cargo.toml new file mode 100644 index 0000000..e229da4 --- /dev/null +++ b/14.Generics/14.9 Phantom type parameters/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "phantom_type_parameters" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/14.Generics/14.9 Phantom type parameters/src/main.rs b/14.Generics/14.9 Phantom type parameters/src/main.rs new file mode 100644 index 0000000..a335698 --- /dev/null +++ b/14.Generics/14.9 Phantom type parameters/src/main.rs @@ -0,0 +1,58 @@ +//! +//! 幽灵类型 (Phantom type) +//! +//! 幽灵类型的特性是只存在于编译阶段用于辅助编译器推断类型和强制保持某些变量,属性的生命周期。 +//! +//! 有很多时候需要和外部的三方库交换数据,这时候我们把不安全的代码封装到安全的结构或者代码中的时候, +//! 需要交换很多数据,这些数据由三方的库申请的,这时候编译器并不知道这个数据的生命周期,所以需要这个 +//! 幽灵类型来明确的告知编译器这个类型的生命周期,这样编译器才能通过编译检查。 +//! +//! 关于幽灵类型更加详细的解释可以看[这里](https://doc.rust-lang.org/nomicon/phantom-data.html) +//! +//! 幽灵定义在泛型中,通过标准库导出的特殊类型 `std::marker::PhantomData` 来标记一个幽灵类型, +//! 该类型只用于编译器的类型检查,并不占用空间,也不能用于存放数据,也没有运行时的行为。 +//! +//! + +use std::marker::PhantomData; // 导入幽灵类型 + +// 声明一个拥有幽灵类型的元组结构,两个泛型 `` 泛型 `A` 拥有是常规的类型,泛型 `B` 是一个隐藏的幽灵类型。 +#[derive(PartialEq)] // 允许结构直接行进 `==` 运算 +struct PhantomTuple(A, PhantomData); + +// 声明一个拥有幽灵类型的结构体,两个泛型 `` 泛型 `A` 拥有是常规的类型,泛型 `B` 是一个隐藏的幽灵类型。 +#[derive(PartialEq)] // 允许结构直接行进 `==` 运算 +struct PhantomStruct { + first: A, + phantom: PhantomData, +} + +// 注意:代码编译的时候只会为正常的泛型 `A` 申请空间,而幽灵类型 `B` 没有空间, +// 所以使用了幽灵类型 `B` 的字段或者位置都不能当做实际存在的类型使用。 + +fn main() { + // 这里的 `f32` 和 `f64` 类型是给幽灵类型使用的。 + // PhantomTuple type specified as ``. + // 明确指定泛型的数据类型,这里声明类型为 `` + let _tuple1: PhantomTuple = PhantomTuple('Q', PhantomData); + // 明确指定泛型的数据类型,这里声明类型为 `` + let _tuple2: PhantomTuple = PhantomTuple('Q', PhantomData); + + // 明确指明类型 `` + let _struct1: PhantomStruct = PhantomStruct { + first: 'Q', + phantom: PhantomData, + }; + + // 明确指明类型 `` + let _struct2: PhantomStruct = PhantomStruct { + first: 'Q', + phantom: PhantomData, + }; + + // 编译错误!类型匹配不能对比 + // println!("_tuple1 == _tuple2 yields: {}", _tuple1 == _tuple2); + + // 编译错误!类型匹配不能对比 + // println!("_struct1 == _struct2 yields: {}", _struct1 == _struct2); +} diff --git a/9.Functions/src/main.rs b/9.Functions/src/main.rs index 776de8f..f833292 100644 --- a/9.Functions/src/main.rs +++ b/9.Functions/src/main.rs @@ -1,3 +1,5 @@ +#![feature(never_type)] // 强制启用内置的 `!` 类型 + //! //! # Functions //! 函数使用 `fn` 关键字定义。必须指定参数类型和数量, @@ -223,90 +225,497 @@ fn closures() { fn closures_capturing() { { use std::mem; - let color = String::from("green"); + let mut color = String::from("green"); - // A closure to print `color` which immediately borrows (`&`) `color` and - // stores the borrow and closure in the `print` variable. It will remain - // borrowed until `print` is used the last time. - // - // `println!` only requires arguments by immutable reference so it doesn't - // impose anything more restrictive. + // 这个闭包捕获了 `color` 变量,闭包内部使用 `println!` 宏打印变量 + // `println!` 宏只会对使用的变量 `借用一个不变引用` 也就是 `&color` + // 所以编译器推断 `color` 被闭包借用了一个不变引用, + // 当这个闭包被最后一次使用后,闭包内借用的不变引用就会被回收 + + // 因为 `println!` 只会对使用的变量借用一个不可变引用,所以没有对引用增加更多的检查规则 let print = || println!("`color`: {}", color); - // Call the closure using the borrow. - print(); + // 调用闭包 + // print(); - // `color` can be borrowed immutably again, because the closure only holds - // an immutable reference to `color`. + // 因为 Rust 允许同时存在多个不可变引用,变量 `color` 可以被再次借用。 let _reborrow = &color; + + // 再次调用闭包,这已经是最后一次使用闭包了,所以这次调用以后,闭包内的引用就会被回收 print(); - // A move or reborrow is allowed after the final use of `print` + // 因为 `color` 已经不存在其他的引用了,所以可以对变量的所有权进行转移。 + // 你可能好奇,上面明明还有一个借用的变量是 `_reborrow` ,为什么这里可以进行转移? + // 是因为 `_reborrow` 这个变量没有被使用,在下面这行代码之后 `_reborrow` 也会失效。 let _color_moved = color; let mut count = 0; - // A closure to increment `count` could take either `&mut count` or `count` - // but `&mut count` is less restrictive so it takes that. Immediately - // borrows `count`. - // - // A `mut` is required on `inc` because a `&mut` is stored inside. Thus, - // calling the closure mutates the closure which requires a `mut`. + + // 因为闭包内对外部变量进行了直接修改, + // 所以这个闭包需要声明成可变的 let mut inc = || { count += 1; println!("`count`: {}", count); }; - // Call the closure using a mutable borrow. + // 调用可变闭包 inc(); - // The closure still mutably borrows `count` because it is called later. - // An attempt to reborrow will lead to an error. + // 因为闭包还会再次使用,Rust 中当一个可变引用存在的话,就不允许再次使用其他的引用, + // 所以这里不能再次借用一个不可变的引用 // let _reborrow = &count; - // ^ TODO: try uncommenting this line. + // ^ TODO: 移除注释查看错误 + + // 再次调用闭包,因为这里是最后一次使用闭包,所以执行完闭包后,闭包就会被回收 inc(); - // The closure no longer needs to borrow `&mut count`. Therefore, it is - // possible to reborrow without an error + // 因为闭包已经被回收了,所以这里可以再次借用新的引用 let _count_reborrowed = &mut count; - // A non-copy type. + // `Box` 类型是在堆上储存数据,不像是原始值在赋值的过程中产生拷贝 let movable = Box::new(3); - // `mem::drop` requires `T` so this must take by value. A copy type - // would copy into the closure leaving the original untouched. - // A non-copy must move and so `movable` immediately moves into - // the closure. + // `mem:drop` 方法是一个泛型方法接收一个 `T` 类型,而且该方法会自动转移变量的所有权 + // 因为变量被闭包捕获的同时,也会对变量的所有权进行转移,一旦闭包被执行过一次 + // 原始的变量就会被移除掉,所以该闭包会被推断成 `FnOnce() ` 类型,并且只能执行一次, + // + // 但是如果变量实现了 `Copy` 特性的话,则会隐式的调用 `Copy` 特性来得到一个拷贝, + // 这样就可以让原始变量可以继续使用,而闭包本身也会自动推断成 `Fn()` 类型 let consume = || { println!("`movable`: {:?}", movable); mem::drop(movable); }; // `consume` consumes the variable so this can only be called once. + // 使用闭包 `consume` 进行变量转移,但是该方法只能调用一次,因为 Box 没有实现 `Copy` consume(); // consume(); - // ^ TODO: Try uncommenting this line. + // ^ TODO: 移除注释查看错误 } { - // `Vec` has non-copy semantics. + // `Vec` 也是一个堆储存的类型 let haystack = vec![1, 2, 3]; + // 闭包借用了 `haystack` 变量的一个不可变引用,但是因为 `move` 关键字, + // 会让编译器直接转移变量的所有权,也就是说,闭包直接转移了 `haystack` 变量的所有权, + // 因为所有权被转移到了闭包内部,所以在后面的代码中都不能使用该变量了 let contains = move |needle| haystack.contains(needle); println!("{}", contains(&1)); println!("{}", contains(&4)); // println!("There're {} elements in vec", haystack.len()); - // ^ Uncommenting above line will result in compile-time error - // because borrow checker doesn't allow re-using variable after it - // has been moved. + // 移除注释查看错误 + // 上面这行代码会报错,因为闭包直接转移了 `haystack` 变量的所有权 - // Removing `move` from closure's signature will cause closure - // to borrow _haystack_ variable immutably, hence _haystack_ is still - // available and uncommenting above line will not cause an error. + // 如果移除掉闭包前面的 `move` 关键字,则闭包只会借用一个不可变引用 + // 这样的话上面的代码就不会报错了。 } } +/// 闭包当做参数使用 +/// +/// 在 Rust 中使用闭包特性,大多数情况下都可以让类型推断引擎自动根据上下文推断闭包的类型, +/// 但是当闭包使用在函数的参数的时候,不允许这么做,一旦函数接受一个闭包的话,那就必须要明确指定闭包的类型 +/// +/// 闭包根据变量的限制规则,有三种类型限制,以下三种限制对于变量的使用限制依次递减 +/// - `Fn`: 闭包只能使用不可变引用 `&T` +/// - `FnMut`: 闭包可以使用可变引用 `&mut T` +/// - `FnOnce`: 闭包可以任意使用 `T`,因为直接使用变量会导致变量的所有权转移,所以一旦闭包捕获了变量的所有权,则该闭包只能调用一次 +/// +/// 编译器会自动检查被捕获变量的使用方式,并选择一个对于变量使用上限制最少的类型 +/// +/// 假设一个声明为 `FnOnce` 的参数,但实际上闭包可能引用了 `&T`,'&mut T`,`T`, +/// 编译器最终会根据实际闭包中引用的变量类型来决定闭包是什么类型的。 +/// +/// 因为如果一个变量可以被转移所有权(闭包内直接使用了 `T` 类型,或者闭包前面加上了 `move` 关键字), +/// 那么就代表这个变量可以被借用,但是反过来不行。 +/// +/// 如果函数参数要求一个 `Fn` 类型的闭包,那么闭包内就不能使用 `&mut T` 和 `T`。 +/// 因为 `Fn` 的要求是闭包内只能使用 `&T`。 +/// +fn as_input_parameters() { + // 尝试修改函数的闭包约束为 `Fn`,`FnMut`,`FnOnce` 来查看不同的结果 + + // 表明 `F` 是一个泛型的的参数,泛型参数由第一个调用方的参数类型来确定具体的类型 + // 函数接受一个闭包,闭包约束为 `FnOnce()` 类型, + // 该类型的闭包内可以使用 `&T`,`&mut T`,`T` + fn apply(f: F) + // where 语句用来约束泛型 `T` 必须是哪些可能的类型 + where + F: FnOnce(), // 这里约束 F 是一个只能够调用一次,并且没有参数和返回值的函数 + { + // ^ TODO: 尝试修改类型为 `Fn` 或 `FnMut`。 + f(); + } + + // 这个函数接收一个闭包函数,并返回一个 `i32` 的值。 + fn apply_to_3(f: F) -> i32 + where + // 闭包参数接受一个 `i32` 的参数,返回一个 `i32` 的值 + F: Fn(i32) -> i32, + { + f(3) + } + + use std::mem; + + let greeting = "hello"; + // 从借用的引用值通过 `to_owned()` 创建一个有所有权的值。 + let mut farewell = "goodbye".to_owned(); + + // 闭包会根据借用的变量,以及变量的使用情况来逐步的确认闭包的类型。 + // 该闭包因为借用了一个不可变变量 `&greeting`,和一个转移所有权的变量 `farewell`, + // 所以该闭包被推断为 `FnOnce` 类型 + let diary = || { + // 这里借用了一个不可变引用 `&greeting`,不可变引用的闭包类型是 `Fn`,所以这里推断闭包为 `Fn`。 + println!("I said {}.", greeting); + + // 这里又借用了一个可变引用 `&mut farewell`,可变引用的闭包类型是 `FnMut`,所以这里推断为 `FnMut`。 + farewell.push_str("!!!"); + // 因为 `farewell` 已经借用为了 `&mut farewell`,又因为 `&mut farewell` 包含 `&mut` 所以闭包依旧是 `FnMut`。 + println!("Then I screamed {}.", farewell); + println!("Now I can sleep. zzzzz"); + + // 这里因为 `mem::drop` 会要求转移参数 `farewell` 的所有权,所以闭包又被推断为 `FnOnce`。 + mem::drop(farewell); + }; + + // 把闭包通过参数传递给 `apply` 函数, + // 因为 `apply` 函数要求的正好就是 `FnOnce` 类型的闭包,所以这里可以正常调用 + apply(diary); + + // 这个闭包没有捕获任何的外部变量,所以这个闭包被推断为 `Fn` 类型 + // 闭包接受一个任意类型的参数,并返回参数 * 2的结果。 + // 这里闭包的参数和返回值被推断为 i32 类型的原因是, + // 我们把闭包传递给了函数 `apply_to_3`,而这个函数的泛型约束为 `Fn(i32) -> i32`, + // 编译器通过我们的代码行为来自动的为闭包分配了对应的类型。 + let double = |x| 2 * x; + + println!("3 doubled: {}", apply_to_3(double)); +} + +/// 闭包可以非常简洁的在声明的上下文作用域中自动捕获一些变量,那么这个简洁的能力带来了哪些问题呢? +/// 当闭包被当做参数传递的时候,函数声明必须是泛型,而且这个泛型必须约束为 `Fn`,`FnMut`,`FnOnce` 的一种 +/// +/// ``` +/// // 这里必须定义成泛型的函数,而且必须对 `f` 参数进行泛型约束 +/// fn apply(f: F) +/// where +/// F: FnOnce() +/// { +/// f(); +/// } +/// +/// ``` +/// +/// 当闭包被定义的时候,编译器隐式的创建了一个匿名的结构来保存这些被闭包捕获的变量, +/// 这个匿名的结构根据闭包的代码推断出应该实现 `Fn`,`FnMut`,`FnOnce` 的其中一个特性。 +/// 变量会自动的绑定到,该匿名的结构体实例,来保留捕获的变量,直到该闭包被调用。 +/// +/// 匿名的结构体在实例化的时候并不知道具体的类型是什么, +/// 所以类型引擎会通过闭包实例真正被使用的时候,来尝试推断出具体的类型。 +/// +fn type_anonymity() { + // 泛型 `F` 是一个闭包,该必须实现 `Fn()` 特性,也就是说 + // 传入的 `f` 参数必须是一个函数,该函数没有参数,并且没有返回值。 + fn apply(f: F) + where + F: Fn(), + { + f(); + } + + let x = 7; + + // 该闭包使用不可变引用捕获了 `x` 变量,并且没有返回值。 + // 编译器会自动生命一个匿名的结构体,该结构体上保存了 `x` 的不可变引用 + // 并且该结构体实现了 `Fn` 的特性。 + let print = || println!("{}", x); + + apply(print); +} + +/// 闭包可以当做参数传递给函数,那么常规函数是否也可以呢? +/// 答案是可以,只要函数的实现可以满足泛型 `Fn`,`FnMut`,`FnOnce` 的约束即可 +fn input_functions() { + // 定义一个泛型参数约束为一个闭包类型,该闭包可以引用外部的不可变变量 + fn call_me(f: F) { + f(); + } + + // 定义一个可以符合 `Fn` 特性约束的普通函数。 + fn function() { + println!("I'm a function!"); + } + + // 定义一个符合 `Fn` 特性约束的闭包。 + let closure = || println!("I'm a closure!"); + + // 传递闭包 + call_me(closure); + // 传递普通函数 + call_me(function); +} + +/// 闭包可以当做函数参数传递,那么闭包也可以当做函数返回值传递 +/// 因为匿名的闭包类型是由编译器自动定义的匿名类型,所以我们不可能提前知道匿名的类型是什么, +/// 但是我们可以知道匿名函数实现了什么特性比如说 `Fn`,`FnMut`,`FnOnce`, +/// 所以我们可以通过使用 `impl` 关键字来约束返回值的类型,来间接的使用闭包返回值。 +fn as_output_parameters() { + // 这里使用 `impl` 关键字约束返回值类型是 `Fn` + fn create_fn() -> impl Fn() { + let text = "Fn".to_owned(); + + // 这里必须要使用 `move` 关键字,因为一旦当前的函数结束以后 + // 这个函数中的所有变量都会被回收,因为闭包中捕获了变量 `text`, + // 所以我们需要让这个 `text` 强制转移到闭包的内部,来避免当前函数结束后 `text` 被回收的情况。 + move || println!("This is a: {}", text) + } + + fn create_fnmut() -> impl FnMut() { + let text = "FnMut".to_owned(); + + move || println!("This is a: {}", text) + } + + fn create_fnonce() -> impl FnOnce() { + let text = "FnOnce".to_owned(); + + move || println!("This is a: {}", text) + } + + let fn_plain = create_fn(); + let mut fn_mut = create_fnmut(); + let fn_once = create_fnonce(); + + fn_plain(); + fn_plain(); + + fn_mut(); + fn_mut(); + + fn_once(); + + // 下面这行代码会报错,因为 `fn_once` 的约束是 `FnOnce` 所以只能调用一次 + // fn_once(); + // 移除注释查看错误 +} + +/// 标准库 `Iterator::any` +/// 该函数会把迭代器中的所有元素都传递给闭包,闭包来返回一个 `bool` 值, +/// 如果有任意一个闭包的返回值是 `true`,则 `Iterator::any` 方法会返回 `true`,否则返回 `false` +/// +/// 该方法声明如下 +/// +/// ``` +/// pub trait Iterator { +/// // 传递进来的闭包函数接受的参数类型 +/// type Item; +/// +/// // `any` 接受一个 `&mut self` 的可变引用, +/// // 也就是说当前方法可以修改数据,但是只是修改而不是转移所有权 +/// fn any(&mut self, f: F) -> bool +/// where +/// // 传递的闭包函数接受一个参数,并且该闭包可以对参数进行修改 +/// F: FnMut(Self::Item) -> bool; +/// } +/// ``` +/// +/// +fn iterator_any() { + let vec1 = vec![1, 2, 3]; + let vec2 = vec![4, 5, 6]; + + // `iter()` 会生成一个对原始数据引用的一个迭代器,然后调用 `any` 方法传递了一个闭包 + // 因为 `any` 方法回调的时候会传递原始数据的引用 `&T`, + // 根据结构规则,`&T` 和 `&x` 会同时去掉 `&` 所以,闭包内部的 `x` 是 `i32` 类型 + println!("2 in vec1: {}", vec1.iter().any(|&x| x == 2)); + + // `into_iter()` 方法会直接转移 `vec2` 的所有权并把原始数据转换成迭代器, + // 所以这里 `any` 的闭包中不需要使用解构语法就可以拿到 `i32` 类型 + println!("2 in vec2: {}", vec2.into_iter().any(|x| x == 2)); + + // 因为 `iter()` 只是借用了 `vec1` 中的值,所以这里可以再次使用 `vec1`。 + println!("vec1 len: {}", vec1.len()); + println!("First element of vec1 is: {}", vec1[0]); + + // `into_iter()` 因为转移了 `vec2` 的所有权,所以这里不能再次使用 `vec2` 了 + // println!("First element of vec2 is: {}", vec2[0]); + // println!("vec2 len: {}", vec2.len()); + // TODO: 移除注释查看错误。 + + let array1 = [1, 2, 3]; + let array2 = [4, 5, 6]; + + // `iter()` 方法同样可以在数组中使用,这里依旧是借用了数据,所以需要解构。 + println!("2 in array1: {}", array1.iter().any(|&x| x == 2)); + // `into_iter()` 方法转移了数组的所有权,所以这里不需要解构,但是后面就不能再次使用原数组了。 + println!("2 in array2: {}", array2.into_iter().any(|x| x == 2)); +} + +/// 标准库 `Iterator::find` 方法 +/// 该方法接受一个 `&mut self` 引用,和一个闭包函数, +/// 当闭包返回 `true` 的时候,该函数会返回对应的传递给闭包的那一项数据。 +/// 闭包函数接收一个 `&Self::Item` 不可变引用,并返回一个 `bool` 值, +/// 当闭包返回 `true` 整个函数就会退出并返回值。 +/// +/// `Iterator::find` 定义如下 +/// ``` +/// pub trait Iterator { +/// // 闭包要接收的参数类型。 +/// type Item; +/// +/// // `find` 接受一个 `&mut self` 参数,通过 `Option` 来返回结果。 +/// fn find

(&mut self, predicate: P) -> Option where +/// // 闭包接受一个 `&Self::item` 的引用参数,并返回一个 `bool` 值。 +/// P: FnMut(&Self::Item) -> bool; +/// } +/// ```` +fn searching_through_iterators() { + let vec1 = vec![1, 2, 3]; + let vec2 = vec![4, 5, 6]; + + // `iter()` 创建一个不可变引用的迭代器,该迭代器中的数据类型是 `&i32`。 + let mut iter = vec1.iter(); + // `into_iter()` 把 `vec2` 转移到新创建的迭代器中,该迭代器的数据类型是 `i32`。 + let mut into_iter = vec2.into_iter(); + + // 因为 `iter()` 创建出的迭代器类型是 `&i32` 类型,而根据 `find` 函数定义, + // 会再次给 `&i32` 类型再次创建一个不可变引用,也就是 `&(&i32)` == `&&i32`, + // 然后根据解构规则,这里的闭包需要两个解构符号 `&&x` 来获取 `i32` 类型。 + println!("Find 2 in vec1: {:?}", iter.find(|&&x| x == 2)); + + // 因为 `into_iter()` 创建出的迭代器类型是 `i32` 类型,而根据 `find` 函数定义, + // 会给 `i32` 类型创建一个不可变引用,也就是 `&i32`, + // 然后根据解构规则,这里的闭包需要解构 `&x` 来获取 `i32` 类型。 + println!("Find 2 in vec2: {:?}", into_iter.find(|&x| x == 2)); + + let array1 = [1, 2, 3]; + let array2 = [4, 5, 6]; + + // `iter()` 数组上也是一样的规则,`iter()` 转换成 `&i32`, + // `find` 会再次添加一个引用变成 `&&i32`, + // 所以闭包中解构需要 `&&x` + println!("Find 2 in array1: {:?}", array1.iter().find(|&&x| x == 2)); + + // `into_iter()` 转移了数组的所有权到迭代器中,类型为 `i32`, + // `find` 会添加一个引用变成 `&i32`, + // 所以闭包中解构需要 `&x` + println!( + "Find 2 in array2: {:?}", + array2.into_iter().find(|&x| x == 2) + ); +} + +/// 高阶函数 +/// Rust 中为迭代器(Iterator),提供了很多高阶的函数式函数, +/// 因为迭代器本身的实现是惰性的,而且因为迭代器可以避免数组、切片的越界检查, +/// 因此迭代器的性能会比普通的循环语句效率要高的,因为通过 `[]` 访问数组或切片都会进行运行时的检查,会消耗更多的性能。 +/// +/// 所以在 Rust 中应该优先使用迭代器,而且 Rust 提供了很多内置的函数式方法来让代码逻辑更清晰。 +/// +/// 下面是同一个功能的两种代码实现。 +/// +fn higher_order_functions() { + fn is_odd(n: u32) -> bool { + n % 2 == 1 + } + + let upper = 1000; + println!( + "Find the sum of all the squared odd numbers under {}", + upper + ); + + // 传统 for 循环写法 + { + // 定义一个计数器变量 + let mut acc = 0; + // 声明一个无限长度的迭代器 + for n in 0.. { + // 把数字进行平方计算 + let n_squared = n * n; + + if n_squared >= upper { + // 如果当前的平方结果大于上限的话则跳出循环 + break; + } else if is_odd(n_squared) { + // 如果平方结果是奇数的话,计数器加一 + acc += n_squared; + } + } + println!("imperative style: {}", acc); + } + + // 迭代器函数式写法 + { + let sum_of_squared_odd_numbers: u32 = (0..) // 无限长度的迭代器 + .map(|n| n * n) // 对数字取平方 + .take_while(|&n_squared| n_squared < upper) // 平方结果到达上限的话 终止迭代器 + .filter(|&n_squared| is_odd(n_squared)) // 把平方的奇数保留下来 + .sum(); // 统计所有符合条件的数字数量 + println!("functional style: {}", sum_of_squared_odd_numbers); + } +} + +/// 分流函数是一个特殊的函数,该函数的返回值定义是 `!`, +/// `!` 关键字表示是一个空的类型(never\never_type),也就是说函数永远不会返回。 +/// +/// ``` +/// // 该函数永远没有返回值,因为 `panic!` 宏会直接终止进程!! +/// fn foo() -> ! { +/// panic!("This call never returns.") +/// } +/// ``` +/// `!` 和 `()` 不同,`!` 的所有可能的值都不存在,而 `()` 有一个可能的值是 `()` 本身。 +/// +/// +/// +fn diverging_functions() { + // 返回值是 `()` 类型 + fn some_fn() -> () { + () // 返回一个 `()` 的实例 + } + + // `_a` 的类型是 `()` + let _a: () = some_fn(); + + println!("This function returns and you can see this line."); + + // `panic!` 宏不会返回,也没有返回值。 + // let x: ! = panic!("This call never returns."); + // 因为 `panic!` 宏不会返回,所以这行代码永远不会执行。 + // println!("You will never see this line!"); + // 尝试移除注释查看结果 + + // `!` (never_type) 的另一个非常有用的场景就是 `match` 模式匹配中的流程控制语句 `continue`, + // `contiune` 语句会强制跳转代码到下一次迭代的起始点,也就是说 `continue` 语句的返回值就是 `!` + fn sum_odd_numbers(up_to: u32) -> u32 { + let mut acc = 0; + for i in 0..up_to { + // 这里 `match` 语句必须返回 `u32` 类型的数据。 + let addition: u32 = match i % 2 == 1 { + // The "i" variable is of type u32, which is perfectly fine. + // 这里的 `i` 是 `u32` 类型,所以可以直接使用。 + true => i, + // 这里使用了 `contiune` 关键字,而这个关键字会改变代码的执行流程, + // 因为改变了代码的执行流程,所以 `contiune` 永远都不会返回,也就不会违反类型检查规则。 + false => continue, + }; + acc += addition; + } + acc + } + println!( + "Sum of odd numbers up to 9 (excluding): {}", + sum_odd_numbers(9) + ); + + // 还有比如说 `loop` 关键字也不会返回值,还有 `exit` 方法不会返回值,或者说一个无限循环的函数也不会返回值,等等的一些场景。 +} + fn main() { // 常规函数 functions(); @@ -316,6 +725,22 @@ fn main() { // 基础闭包 closures(); - // 闭包捕获 + // 闭包捕获以及闭包的类型推断 closures_capturing(); + // 闭包捕获的原理 + type_anonymity(); + // 普通函数当做参数传递 + input_functions(); + // 闭包当做返回值使用 + as_output_parameters(); + + // 标准库的一些闭包例子 + iterator_any(); + searching_through_iterators(); + + // 高阶函数 + higher_order_functions(); + + // 分流函数 never_type + diverging_functions(); } diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..e69de29