在Rust中将函数转换为特征的机制是什么?

什么时候我们 :

来自actix-web示例如下:

use actix_web::{web, App, Responder, HttpServer};

async fn index() -> impl Responder {
    "Hello world!"
}

#[actix_rt::main]
async fn main() -> std::io::Result<()> {
    HttpServer::new(|| {
        App::new().service(
            web::scope("/app").route("/index.html", web::get().to(index)),
        )
    })
    .bind("127.0.0.1:8088")?
    .run()
    .await
}

我的问题是该语句如何to(index)在Rust中工作。

查看源代码,to我们看到:

pub fn to<F, T, R, U>(mut self, handler: F) -> Self
where
    F: Factory<T, R, U>,
// --- snip

其中Factory定义为

pub trait Factory<T, R, O>: Clone + 'static
where
    R: Future<Output = O>,
    O: Responder,
{
    fn call(&self, param: T) -> R;
}

函数async fn index() -> impl Responder转换成Factory<T, R, O>什么机制

罗德里戈:

在您的代码段之后一个特征实现

impl<F, R, O> Factory<(), R, O> for F
where
    F: Fn() -> R + Clone + 'static,
    R: Future<Output = O>,
    O: Responder,
{
    fn call(&self, _: ()) -> R {
        (self)()
    }
}

可以理解为:如果一个类型F实现了,Fn() -> Future<Output = impl Responder> + ...那么它也实现了Factory<(), _, _>

async fn对于返回Future某种a(并且可以在.await内部使用的函数来说,它是一个语法糖,因此async fn index() -> impl Responder实现Fn() -> impl Future<Output = impl Responder>也实现了Factory<(), _, _>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么不能在Rust中将此尾部递归函数转换为迭代函数?

在Rust中将usize转换为f64时,要知道精度损失的最佳方法是什么?

为什么Rust无法在类型构造函数中将可变引用强制转换为不可变引用?

Rust中的自动特征是什么?

在 Kotlin 中将毫秒转换为分钟的理想方法是什么?

在Java中将对象转换为Map的目的是什么?

在Java中将对象转换为Map的目的是什么?

在JavaScript中将String转换为Number的最快方法是什么?

在Swift中将String转换为[Character]的最佳方法是什么?

在Julia中将int转换为char的最佳方法是什么?

在Julia中将Int转换为String的最佳方法是什么?

socket()函数的内部机制是什么?

unix_timestamp 函数在 Hive 中将 2 位格式年份转换为 4 位格式年份的逻辑是什么?

将 if 语句转换为函数的最佳方法是什么?

在RUST中将String转换为Hashmap

在Rust中将float转换为整数

la4j 显性特征值 - 在 java 8 中将命令式算法转换为函数式风格

机制是什么?

CPython中从C代码调用Python函数的机制是什么?

将 Rust 枚举变体转换为数字数据类型是什么意思?

从C ++ std :: vector <float>转换为Rust Vec <f32>的最佳方法是什么?

在rust-cpython中将rust结构转换为PyObject

在Python中将具有多个功能的分类数据转换为数字的最快方法是什么?

在Java中将double [] []转换为MATLAB矩阵的最快方法是什么?

在 Python 3 中将字节转换为十六进制字符串的正确方法是什么?

在 MVC 程序的视图中将类型转换为列表的最佳方法是什么?

在Django中将请求的响应转换为DRF响应的最优雅的方法是什么?

在Java中将分隔符转换为列表的最佳习惯是什么?

在JavaScript中将数字转换为字符串的最佳方法是什么?