从现在开始,我们正式踏入了 Rust 大陆,这片广袤而神秘的世界,在这个世界中,将接触到很多之前都没有听过的概念:

    • 所有权、借用、生命周期
    • 宏编程
    • 模式匹配

    通过下面这段代码简单浏览下 Rust 的语法:

    1. // Rust 程序入口函数,跟其它语言一样,都是 main,该函数目前无返回值
    2. fn main() {
    3. // 使用let来声明变量,进行绑定,a是不可变的
    4. // 此处没有指定a的类型,编译器会默认根据a的值为a推断类型:i32,有符号32位整数
    5. // 语句的末尾必须以分号结尾
    6. let a = 10;
    7. // 主动指定b的类型为i32
    8. let b: i32 = 20;
    9. // 这里有两点值得注意:
    10. // 1. 可以在数值中带上类型:30i32表示数值是30,类型是i32
    11. // 2. c是可变的,mut是mutable的缩写
    12. let mut c = 30i32;
    13. // 还能在数值和类型中间添加一个下划线,让可读性更好
    14. let d = 30_i32;
    15. // 跟其它语言一样,可以使用一个函数的返回值来作为另一个函数的参数
    16. let e = add(add(a, b), add(c, d));
    17. // println!是宏调用,看起来像是函数但是它返回的是宏定义的代码块
    18. // 该函数将指定的格式化字符串输出到标准输出中(控制台)
    19. // {}是占位符,在具体执行过程中,会把e的值代入进来
    20. println!("( a + b ) + ( c + d ) = {}", e);
    21. }
    22. // 定义一个函数,输入两个i32类型的32位有符号整数,返回它们的和
    23. fn add(i: i32, j: i32) -> i32 {
    24. // 返回相加值,这里可以省略return
    25. i + j
    26. }

    注意 在上面的 add 函数中,不要为 i+j 添加 ;,这会改变语法导致函数返回 () 而不是 i32,具体参见语句和表达式

    有几点可以留意下:

    • 字符串使用双引号 “” 而不是单引号 ‘’,Rust 中单引号是留给单个字符类型(char)使用的
    • Rust 使用 {} 来作为格式化输出占位符,其它语言可能使用的是 %s,%d,%p 等,由于 println! 会自动推导出具体的类型,因此无需手动指定