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

函数指针 :

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

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

rust 复制代码
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用作返回类型。

rust 复制代码
fn returns_closure() -> Box<dyn Fn(i32) -> i32> {
Box::new(|x| x + 1)
}

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

相关推荐
虾球xz21 分钟前
CppCon 2018 学习:EFFECTIVE REPLACEMENT OF DYNAMIC POLYMORPHISM WITH std::variant
开发语言·c++·学习
Allen_LVyingbo26 分钟前
Python常用医疗AI库以及案例解析(2025年版、上)
开发语言·人工智能·python·学习·健康医疗
小哈龙30 分钟前
裸仓库 + Git Bash 搭建 本地 Git 服务端与客户端
开发语言·git·bash
到账一个亿41 分钟前
后端树形结构
后端
武子康44 分钟前
大数据-31 ZooKeeper 内部原理 Leader选举 ZAB协议
大数据·后端·zookeeper
受之以蒙44 分钟前
Rust & WASM 之 wasm-bindgen 基础:让 Rust 与 JavaScript 无缝对话
前端·笔记·rust
我是哪吒1 小时前
分布式微服务系统架构第155集:JavaPlus技术文档平台日更-Java线程池实现原理
后端·面试·github
Elixin1 小时前
第一章:环境搭建
rust
G探险者1 小时前
《如何在 Spring 中实现 MQ 消息的自动重连:监听与发送双通道策略》
java·开发语言·rpc
代码老y1 小时前
Spring Boot + 本地部署大模型实现:安全性与可靠性保障
spring boot·后端·bootstrap