包管理器Cargo的基本使用
Rust官方提供了包管理器Cargo,且Cargo同时负责项目的初始化、构建等功能。建议的做法是使用Cargo初始化项目,然后进行编写,之后使用Cargo进行构建。故而,这里简单介绍如何用Cargo完成这两项功能。
创建项目
$ cargo new YOUR_DIR --bin
该命令会在当前目录下生成 YOUR_DIR 这个新目录,其中包含新项目的“模板”文件(即示例)。之后的命令基本均在该目录下进行。
注意这里的 --bin 要求Cargo创建一个二进制/可执行项目; --lib 或留空均会创建库项目。
在 YOUR_DIR 目录下有一个名为 Cargo.toml 的文件。该文件是项目的(Cargo)配置文件,用来描述项目的依赖关系、控制编译/构建过程等。
编译并执行项目
$ cargo run
Rust基本语法
Rust是一门强类型、手动类型的语言,这意味着函数参数需要显式地声明参数类型(以及返回值类型)。但Rust支持类型自动推导,在声明并初始化变量时可以通过类型自动推导而省略变量类型。整体而言,Rust的语法承袭自C家族。
Hello world
类似于C,Rust程序开始于 main 函数:
fn main() { println!("Hello, world!"); }
在Rust中,main 函数是一个没有参数没有返回值的函数。可以看到:
fn声明一个函数- 大括号/花括号 
{}用来标记代码块 - 分号 
;作为语句结束符 
注意到这里输出所用的 println!() 是一个 宏 ——其中的感叹号 ! 正是宏的标识(定义宏时编译器自动添加)。Rust的 宏 更贴近Lisp系的宏,不在本文中介绍。
函数、参数及类型声明
fn my_awesome_function(x: i32) -> i32 { x + 1 }
- Rust的数据类型在变量名称之后,使用冒号分隔
 - 函数返回值使用 
->标记 - 函数最后一行 表达式 作为函数的返回值
 - 但也可使用return,写成 语句
 
注意 表达式 和 语句 的区别,语句不返回值。
变量声明及代码块
(部分代码段抄自 The Rust Programming Language (Second Edition) )
fn main() { let a: float32; a = 30.4; let x = 5; let y = { let x = 3; x + 1 }; println!("a={} x={} y={}", a, x, y); }
- 使用 
let进行变量的声明 - 如之前所说,变量的类型在变量名之后
 - 当编译器可以进行自动推导时,变量的类型可以省略
 
- 使用 
 - Rust使用 
{}划分代码块,每个代码块划分一个作用域 - 内部代码块/作用域可以通过再次声明变量,以临时覆盖外部变量的值
 - 每个代码块被视为一个 表达式 ,(同函数一样)使用其内部的最后一个表达式作为其值
 
可变性
fn main() { let x = 5; x = 1; // 本行会报错,删除本行解决问题 let mut y = 2; y = 8; println!("x={} y={}", x, y); }
- Rust的变量默认为 不可变 (类似于const/final),函数参数也是如此
 - 如要使其可变,需要在其名称前面加上 
mut 
杂项(可不看)
fn multi() -> (i32, i32, f32) { let x: i32; let y = 3; let z; x = 20; z = 50.0; (x, y, z) } fn main() { let (a, b, c) = multi(); println!("a={0} b={1} c={2}", a, b, c); }
- 函数的声明/定义顺序不重要
 - 并且Rust似乎并没有专门的“声明”语法
 
- 函数可以进行多值返回,多个返回值使用 
()括起来 - 可以使用“解包”操作将多个值直接赋值给相同数量的变量
 - 这里实际上是返回了一个 元组 (见 数据类型 部分)
 
- 已声明的变量可以被重新声明,以覆盖原有的变量(常用于转换类型)
 
        Backward links:
        
    
您可以在Hypothesis上的該群組內進行評論,或使用下面的Disqus評論。