Rust 中语法可以分成两大类: 语句(Statement)和表达式(Expression)。 语句是指要执行的一些操作和产生负作用的表达式。 表达式主要用于计算求值。
语句可分为两种: 声明语句(Declaration statement)和 表达式语句(Expression statement)。 * 声明语句,用于声明各种语言项(Item),包括声明变量、静态变量、常量、结构体、函数等,以及通过 extern 和 use 关键字引入包和模块等。 * 表达式语句,特指以分好结尾的表达式。此类表达式求值结果将被舍弃,并总返回单元类型()。
/* 下两行为声明语句 */
// extern create std;
// use std::prelude::vl::*
fn main () {
pub fn answer () -> () {
let a = 40;
let b = 2;
assert_eq!(sum(a, b), 42);
}
pub fn sum(a: i32, b: i32) -> i32 {
a + b
}
answer();
}
第 1 行和第 2 行为声明语句,无需求职,只是用来引入标准库包以及 prelude 模块。此处做注释是因为 Rust 会为每个 crate 都自动引入标准库模块,除非使用 #[no_std] 属性指明不需要标准库。
fn 关键字定义了两个函数 answer 和 sum。关键字 fn 是 function 缩写。
函数 answer 没有输入参数,且返回值为 单元类型()。单元类型拥有唯一的值,就是它本身,为方便描述称之为单元值。以单元值作为返回值,代表当前函数无返回值,无返回值的函数无需声明返回类型。
在 answer 使用let 声明了两个变量 a 和 b ,其后必须加分号。
assert_eq! 是宏语句,它是由 Rust 提供的断言,允许判断给定的两个表达式求值结果是否相同。以!结尾并且可以像函数一样被调用的语句在 Rust 中被称为宏。
函数 sun 的两个输入参数和返回值均指定为 i32 类型。函数体只包含一个表达式用于计算 a 与 b 的值,并返回。
Rust 编译器在解析代码时,如果遇到分号,就会继续往后面执行;如果碰到语句,则执行语句;如果遇到表达式,则会对表达式求值,如果分号后面什么都没有,就会补充上单元值().
可以将 Rust 中的一切都当做是表达式。由于分好什么都没有的时候会自动补充单元值的特点,我们可以将 Rust 语句看做计算结果均为() 的特殊表达式。对于普通表达式来讲,则会得到正常的求值结果。