01.语法基础

语法基础

fn main() {
    print!("Hello, world!");
}

print 是 Rust 标准库中定义的宏的名称。! 指定前面的名称表示宏。如果没有这样的符号,则打印将指示功能。Rust 标准库中没有此类函数,因此您会得到编译错误。宏与功能类似,它是一些与名称相关联的 Rust 代码。通过使用此名称,您要求此时插入此类代码。要了解 ;,我们将创建另一个函数。首先,主要是打印数字 8:

fn main() {
    println!("Hello, world number {}!", 8);
}

println! 中的 {} 表示“将变量放入此处”。这会打印 Hello, world number 8!。我们可以放更多:

fn main() {
    println!("Hello, worlds number {} and {}!", 8, 9);
}

下面我们可以创建新的函数:

fn main() {
    println!("Hello, world number {}!", number());
}

fn number() -> i32 {
    8
}

函数内部只有 8,没有 ;,所以它是返回的值。如果带有;,则不会返回任何内容。如果有 ;,Rust 不会编译它,因为返回值为 i32 和 ; 返回 (),而不是 i32:

fn main() {
    println!("Hello, world number {}", number());
}

fn number() -> i32 {
    8;  // ⚠️
}

5 | fn number() -> i32 {
  |    ------      ^^^ expected `i32`, found `()`
  |    |
  |    implicitly returns `()` as its body has no tail or `return` expression
6 |     8;
  |      - help: consider removing this semicolon

这意味着“您告诉我 number() 返回一个 i32,但您添加了;,因此它不返回任何内容”。因此,编译器建议删除分号。您也可以写 return 8; 但是在 Rust 中,仅仅删除 ; 回来。要为函数提供变量时,请将其放在 () 中。您必须给他们起一个名字并写下类型。

fn main() {
    multiply(8, 9); // We can give the numbers directly
    let some_number = 10; // Or we can declare two variables
    let some_other_number = 2;
    multiply(some_number, some_other_number); // and put them in the function
}

fn multiply(number_one: i32, number_two: i32) { // Two i32s will enter the function. We will call them number_one and number_two.
    let result = number_one * number_two;
    println!("{} times {} is {}", number_one, number_two, result);
}

当然,我们也可以返回一个 i32:

fn main() {
    let multiply_result = multiply(8, 9); // We used multiply() to print and to give the result to multiply_result
}

fn multiply(number_one: i32, number_two: i32) -> i32 {
    let result = number_one * number_two;
    println!("{} times {} is {}", number_one, number_two, result);
    result // this is the i32 that we return
}