|
|
|
@ -2,7 +2,7 @@
|
|
|
|
|
|
|
|
|
|
> [ch03-03-how-functions-work.md](https://github.com/rust-lang/book/blob/main/src/ch03-03-how-functions-work.md)
|
|
|
|
|
> <br>
|
|
|
|
|
> commit 3cb562efb67fd5b57c0b20c316cbb8179133e196
|
|
|
|
|
> commit 4284e160715917a768d25265daf2db897c683065
|
|
|
|
|
|
|
|
|
|
函数在 Rust 代码中非常普遍。你已经见过语言中最重要的函数之一:`main` 函数,它是很多程序的入口点。你也见过 `fn` 关键字,它用来声明新函数。
|
|
|
|
|
|
|
|
|
@ -16,7 +16,7 @@ Rust 代码中的函数和变量名使用 *snake case* 规范风格。在 snake
|
|
|
|
|
|
|
|
|
|
我们在Rust 中通过输入 `fn` 后面跟着函数名和一对圆括号来定义函数。大括号告诉编译器哪里是函数体的开始和结尾。
|
|
|
|
|
|
|
|
|
|
可以使用函数名后跟圆括号来调用我们定义过的任意函数。因为程序中已定义 `another_function` 函数,所以可以在 `main` 函数中调用它。注意,源码中 `another_function` 定义在 `main` 函数 **之后**;也可以定义在之前。Rust 不关心函数定义于何处,只要定义了就行。
|
|
|
|
|
可以使用函数名后跟圆括号来调用我们定义过的任意函数。因为程序中已定义 `another_function` 函数,所以可以在 `main` 函数中调用它。注意,源码中 `another_function` 定义在 `main` 函数 **之后**;也可以定义在之前。Rust 不关心函数定义所在的位置,只要函数被调用时出现在调用之处可见的作用域内就行。
|
|
|
|
|
|
|
|
|
|
让我们新建一个叫做 *functions* 的二进制项目来进一步探索函数。将上面的 `another_function` 例子写入 *src/main.rs* 中并运行。你应该会看到如下输出:
|
|
|
|
|
|
|
|
|
@ -44,9 +44,9 @@ Rust 代码中的函数和变量名使用 *snake case* 规范风格。在 snake
|
|
|
|
|
{{#include ../listings/ch03-common-programming-concepts/no-listing-17-functions-with-parameters/output.txt}}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
`another_function` 的声明中有一个命名为 `x` 的参数。`x` 的类型被指定为 `i32`。当我们将 `5` 传给 `another_function` 时,`println!` 宏将 `5` 放入格式化字符串中大括号的位置。
|
|
|
|
|
`another_function` 的声明中有一个命名为 `x` 的参数。`x` 的类型被指定为 `i32`。当我们将 `5` 传给 `another_function` 时,`println!` 宏会把 `5` 放在格式字符串中包含 `x` 的那对花括号的位置。
|
|
|
|
|
|
|
|
|
|
在函数签名中,**必须** 声明每个参数的类型。这是 Rust 设计中一个经过慎重考虑的决定:要求在函数定义中提供类型注解,意味着编译器再也不需要你在代码的其他地方注明类型来指出你的意图。
|
|
|
|
|
在函数签名中,**必须** 声明每个参数的类型。这是 Rust 设计中一个经过慎重考虑的决定:要求在函数定义中提供类型注解,意味着编译器再也不需要你在代码的其他地方注明类型来指出你的意图。而且,在知道函数需要什么类型后,编译器就能够给出更有用的错误消息。
|
|
|
|
|
|
|
|
|
|
当定义多个参数时,使用逗号分隔,像这样:
|
|
|
|
|
|
|
|
|
|