普通函数

我们在基本数据类型谈到了fn类型,这是一种指向函数的指针类型。在这篇我们会深入学习函数。
函数是某种可复用逻辑的代码实现。
函数通常有如下几部分组成。

  • 函数名(可选)

    参数

  • 返回值

一个典型的函数声明如下:

  1. fn is_ok(key: u32) -> bool {
  2. true
  3. }

函数名

在上述实例中,fn为关键字,用来声明一个函数,is_ok为函数名,我们可以通过函数名使用函数,也可以使用fn类型的变量来调用函数。函数同样具有类型,函数的类型有函数的参数和返回值来决定。

函数参数

函数参数最重要的信息有两点:

  • 函数参数的个数
  • 每个参数的具体类型

    函数返回值

    要记住一点,不只函数有返回值,rust中任何一个语句都有返回值。
    函数的参数和返回值决定了函数的类型。

    特殊

    方法

    rust中方法有两种,一种是impl方法,一种是trait方法。方法通常有一个隐藏的参数(实现类型的值)或者是特殊的作用域。

    闭包

    闭包是一种能捕获环境变量的特殊函数,它通过||来声明。
    它通过三种trait来说明闭包对环境变量的使用。

  • Fn 对环境变量的共享引用

  • FnMut 对环境变量的可变引用
  • FnOnce 对环境变量的所有权转移。

这里需要注意的是FnOnce,因为它所持有的环境变量所有权已转移,所以只能调用一次。
注意||内部的参数不是环境变量,而是闭包的参数。
注意||同样{}包裹,有着自身的作用域,只是大多数{}可省略。
一个典型的闭包如下:

  1. let y = |x|{
  2. x*x
  3. };