From bf604a661de6df115bd47e4630bb7e5f8cfac8a9 Mon Sep 17 00:00:00 2001 From: "Naupio Z.Y. Huang" Date: Sun, 10 Apr 2016 14:46:24 +0800 Subject: [PATCH] add 04-02-primitive-type && update 04-01 (#173) * fix #160 * rewrite 04 chapter: add 04-00-rust-travel * fix #163 * update 12-01 * add 04-01-primitive-type && update 04-00 * add 04-01-primitive-type && update 04-00 * add 04-01-primitive-type && update 04-00 * update readme * update readme --- ...00-rust-travel.md => 04-01-rust-travel.md} | 60 ++++++--------- .../04-02-primitive-type.md | 73 +++++++++++++++++++ README.md | 2 +- 3 files changed, 97 insertions(+), 38 deletions(-) rename 04-quickstart-rewrite-WIP/{04-00-rust-travel.md => 04-01-rust-travel.md} (82%) create mode 100644 04-quickstart-rewrite-WIP/04-02-primitive-type.md diff --git a/04-quickstart-rewrite-WIP/04-00-rust-travel.md b/04-quickstart-rewrite-WIP/04-01-rust-travel.md similarity index 82% rename from 04-quickstart-rewrite-WIP/04-00-rust-travel.md rename to 04-quickstart-rewrite-WIP/04-01-rust-travel.md index 25f700e..97c52c0 100644 --- a/04-quickstart-rewrite-WIP/04-00-rust-travel.md +++ b/04-quickstart-rewrite-WIP/04-01-rust-travel.md @@ -8,13 +8,10 @@ - 创建一个 Doing 目录和 helloworld.rs 文件 -> ps: mkdir ~/Doing - -> ps: cd ~/Doing - -> ps: notepad helloworld.rs # 作者偏向于使用 sublime 作为编辑器 - -> ps: subl helloworld.rs # 本章以后使用 subl 代替 notepad +> ps: mkdir ~/Doing +> ps: cd ~/Doing +> ps: notepad helloworld.rs # 作者偏向于使用 sublime 作为编辑器 +> ps: subl helloworld.rs # 本章以后使用 subl 代替 notepad 注意这里用的后缀名是.rs,一般编程语言的代码文件都有惯用的后缀名,比如: C语言是.c,java是.java,python是.py等等,**请务必记住Rust语言的惯用后缀名是.rs**(虽然用别的后缀名也能通过rustc的编译)。 @@ -29,15 +26,13 @@ fn main() { - 编译 helloworld.rs 文件 -> ps: rustc helloworld.rs - -> ps: rustc helloworld.rs -O # 也可以选择优化编译 +> ps: rustc helloworld.rs +> ps: rustc helloworld.rs -O # 也可以选择优化编译 - 运行程序 -> ps: ./helloworld.exe # windows 平台下需要加 .exe 后缀 - -> Hello World! +> ps: ./helloworld.exe # windows 平台下需要加 .exe 后缀 +> Hello World! 没有`ps:`前缀的表示为控制台打印输出。 @@ -54,27 +49,23 @@ fn main() { - 创建项目 hellorust -> ps: cargo new hellorust --bin +> ps: cargo new hellorust --bin - 查看目录结构 -> ps: tree # win10 powershell 自带有 tree 查看文件目录结构的功能 - -> └─hellorust - -> ----└─src +> ps: tree # win10 powershell 自带有 tree 查看文件目录结构的功能 +> └─hellorust +> ----└─src 这里显示的目录结构,在hellorust目录下有 src 文件夹和 Cargo.toml 文件,同时这个目录会初始化为 git 项目 - 查看Cargo.toml文件 -> ps: cat Cargo.toml - -> [package] -name = "hellorust" -version = "0.1." -authors = ["YourName "] - +> ps: cat Cargo.toml +> [package] +name = "hellorust" +version = "0.1." +authors = ["YourName "] > [dependencies] - 编辑src目录下的main.rs文件 @@ -99,14 +90,9 @@ fn main() { - 编译和运行 -> ps: cargo build - -> ps: cargo build --release # 这个属于优化编译 - -> ps: ./target/debug/hellorust.exe - -> ps: ./target/release/hellorust.exe # 如果前面是优化编译,则这样运行 - -> ps: cargo run # 编译和运行合在一起 - -> ps: cargo run --release # 同上,区别是是优化编译的 \ No newline at end of file +> ps: cargo build +> ps: cargo build --release # 这个属于优化编译 +> ps: ./target/debug/hellorust.exe +> ps: ./target/release/hellorust.exe # 如果前面是优化编译,则这样运行 +> ps: cargo run # 编译和运行合在一起 +> ps: cargo run --release # 同上,区别是是优化编译的 \ No newline at end of file diff --git a/04-quickstart-rewrite-WIP/04-02-primitive-type.md b/04-quickstart-rewrite-WIP/04-02-primitive-type.md new file mode 100644 index 0000000..1b2752a --- /dev/null +++ b/04-quickstart-rewrite-WIP/04-02-primitive-type.md @@ -0,0 +1,73 @@ +# 基本类型 + +## 变量绑定 +Rust 通过 let 关键字进行变量绑定。 +```rust +fn main() { + let a1 = 5; + let a2:i32 = 5; + assert_eq!(a1, a2); + //let 绑定 整数变量默认类型推断是 i32 + + let b1:u32 = 5; + //assert_eq!(a1, b1); + //去掉上面的注释会报错,因为类型不匹配 + //errer: mismatched types +} +``` +这里的 assert_eq! 宏的作用是判断两个参数是不是相等的,但如果是两个不匹配的类型,就算字面值相等也会报错。 + +## 可变绑定 +rust 在声明变量时,在变量前面加入 mut 关键字,变量就会成为可变绑定的变量。 +```rust +fn main() { + let mut a: f64 = 1.0; + let b = 2.0f32; + + //改变 a 的绑定 + a = 2.0; + println!("{:?}", a); + + //重新绑定为不可变 + let a = a; + + //不能赋值 + //a = 3.0; + + //类型不匹配 + //assert_eq!(a, b); +} +``` +这里的 b 变量,绑定了 2.0f32。这是 Rust 里面值类型显式标记的语发。语法规定为`value`+`tpye`的形式。 + +**例如:** +固定大小类型: +> 1u8 1i8 +> 1u16 1i16 +> 1u32 1i32 +> 1u64 1i64 + +可变大小类型: +> 1usize 1isize + +浮点类型: +> 1f32 1f64 + +## let解构 +为什么在 Rust 里面生命一个变量的时候要采用 let 绑定语法? +那是因为 let 绑定语法的表达能力更强,而且 let 语言其实是一种模式。 + +**例如:** +```rust +fn main() { + let (a, mut b): (bool,bool) = (true, false); + println!("a = {:?}, b = {:?}", a, b); + //a 不可变绑定 + //a = false; + + //b 可变绑定 + b = true; + assert_eq!(a, b); +} +``` +这里使用了 bool 类型,bool 类型只有 true 和 false 两个值。通常用来做逻辑判断。 \ No newline at end of file diff --git a/README.md b/README.md index ed3caaf..ae73df9 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ https://wayslog.gitbooks.io/rustprimer/content/ 4. [Rust一小时快速入门](./04-quickstart/04-00-intro.md)「ee0703」 1. [第一个Rust程序](./04-quickstart/04-01-hello-world.md) 2. [简单的数学运算](./04-quickstart/04-02-basic-math.md) - 3. [快速上手](./04-quickstart/04-03-cheet-sheet.md) + 3. [快速上手](./04-quickstart/04-03-cheet-sheet.md) 5. [Cargo项目管理器](./05-cargo-projects-manager/05-cargo-projects-manager.md)「fuyingfuying」 6. [基本程序结构](./06-flow/06-00-preface.md)「daogangtang」 1. [注释](./06-flow/06-01-comment.md)