Rust编程- 函数指针与返回闭包

函数指针 :

        可以将普通函数传递至其他函数。函数会在传递的过程中被强制转换成fn类型,区别闭包的Fn

        fn类型也就是所谓的函数指针(function pointer)

fn add_one(x:i32) ->i32{
  x + 1
}

fn do_twice(f:fn(i32)-> i32,arg:i32) -> i32{
  f(arg) + f(arg)
}

fn是一个类型而不是一个trait。因此,我们可以直接指定fn为参数类型,而不用声明一个以Fn trait为约束的泛型参数

由于函数指针实现了全部3种闭包trait(Fn、FnMut以及FnOnce),所以我们总是可以把函数指针用作参数传递给一个接收闭包的函数

使用函数指针的场景:C函数可以接收函数作为参数,但它却没有闭包

所以,要使用闭包trait的泛型来编写函数,这样的函数可以同时处理闭包与普通函数

构造器视作实现了闭包trait的函数指针,并在那些接收闭包的方法中使用它们,例如元组枚举

返回闭包:

        闭包使用了trait来进行表达,所以你无法在函数中直接返回一个闭包

        由于闭包使用了trait来进行表达,所以无法在函数中直接返回一个闭包。但是可以将一个实现了该trait的具体类型作函数的返回值。但是闭包没有一个可供返回的具体类型;也无法把函数指针fn用作返回类型。

fn returns_closure() -> Box<dyn Fn(i32) -> i32> {
Box::new(|x| x + 1)
}

通过Box<dyn Fn(i32)->i32> 通过trait对象来实现返回类型是闭包

相关推荐

  1. Rust编程- 函数指针返回

    2024-07-22 16:44:09       17 阅读
  2. Rust

    2024-07-22 16:44:09       50 阅读
  3. 【Go】匿名函数

    2024-07-22 16:44:09       30 阅读
  4. modern C++:匿名函数

    2024-07-22 16:44:09       21 阅读
  5. golang普通函数函数使用示例

    2024-07-22 16:44:09       25 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-22 16:44:09       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-22 16:44:09       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-22 16:44:09       45 阅读
  4. Python语言-面向对象

    2024-07-22 16:44:09       55 阅读

热门阅读

  1. 0、springboot3 vue3开发平台-系统简介

    2024-07-22 16:44:09       17 阅读
  2. 将用户控件嵌入到 Excel 窗口中

    2024-07-22 16:44:09       15 阅读
  3. 数据仓库中的数据治理方法

    2024-07-22 16:44:09       16 阅读
  4. GFS分布式文件系统

    2024-07-22 16:44:09       15 阅读
  5. linux环境下使用logrotate切分nginx日志

    2024-07-22 16:44:09       18 阅读
  6. css中浮动的原理

    2024-07-22 16:44:09       14 阅读
  7. c# 索引器

    2024-07-22 16:44:09       16 阅读
  8. 初入C语言的主要难点

    2024-07-22 16:44:09       16 阅读