Skip to content

Commit

Permalink
add 04-02-primitive-type && update 04-01 (#173)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
Naupio Z.Y. Huang committed Apr 10, 2016
1 parent b7177ee commit bf604a6
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 38 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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的编译)。
Expand All @@ -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:`前缀的表示为控制台打印输出。

Expand All @@ -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 <YourEmail>"]

> ps: cat Cargo.toml
> [package]
name = "hellorust"
version = "0.1."
authors = ["YourName <YourEmail>"]
> [dependencies]
- 编辑src目录下的main.rs文件
Expand All @@ -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 # 同上,区别是是优化编译的
> ps: cargo build
> ps: cargo build --release # 这个属于优化编译
> ps: ./target/debug/hellorust.exe
> ps: ./target/release/hellorust.exe # 如果前面是优化编译,则这样运行
> ps: cargo run # 编译和运行合在一起
> ps: cargo run --release # 同上,区别是是优化编译的
73 changes: 73 additions & 0 deletions 04-quickstart-rewrite-WIP/04-02-primitive-type.md
Original file line number Diff line number Diff line change
@@ -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 两个值。通常用来做逻辑判断。
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit bf604a6

Please sign in to comment.