函数指针类型

语法
裸函数类型 :
   对于生命周期组? 函数类型限定符组 fn
      ( 函数参数可能命名为可变参数? ) 裸函数返回类型?

函数类型限定符组:
   unsafe? (extern Abi?)?

裸函数返回类型:
   -> 无约束类型组

函数参数可能命名为可变参数 :
   可能命名函数参数组 | 可能命名函数参数可变

可能命名函数参数组 :
   可能命名函数参数 ( , 可能命名函数参数 )* ,?

可能命名函数参数 :
   外围属性* ( ( 标识符 | _ ) : )? 类型

可能命名函数参数可变 :
   ( 可能命名函数参数 , )* 可能命名函数参数 , 外围属性* ...

函数指针类型,用 fn 关键字表示,用来引用一个函数,该函数的ID不一定在编译时已知。 可以通过 函数条目 和无捕获的 闭包 进行强制转换来创建。

unsafe 修饰符表示该类型的值是一个 非安全的函数 ,而 extern 修饰符表示 外部函数

可变参数只能在使用了 "C""cdecl" 调用约定的 extern 函数类型中指定。

下面是一个例子,其中 Binop 被定义为函数指针类型:

#![allow(unused)]
fn main() {
fn add(x: i32, y: i32) -> i32 {
    x + y
}

let mut x = add(5,7);

type Binop = fn(i32, i32) -> i32;
let bo: Binop = add;
x = bo(5,7);
}

函数指针参数上的属性

函数指针参数上的属性遵循与 常规函数参数 相同的规则和限制。