gpt4 book ai didi

rust - 是否可以将函数类型从签名中移出并移到 where 子句中?

转载 作者:行者123 更新时间:2023-11-29 07:57:27 25 4
gpt4 key购买 nike

我在 Rust 中有一个特别长的方法签名,当使用最新的格式化程序格式化时它看起来像这样(对于那些感兴趣的人,这是使用 Gotham ):

pub fn extract_body<'a, T: 'a>(
mut state: State,
) -> Box<Future<Item = (State, T), Error = (State, HandlerError)> + 'a>
where
T: DeserializeOwned,
{

签名非常长,我更喜欢这样的:

pub fn extract_body<'a, T: 'a>(mut state: State) -> Box<F + 'a>
where
T: DeserializeOwned,
F: Future<Item = (State, T), Error = (State, HandlerError)>,
{

注意 F 的使用为了格式更好一点。不幸的是,这不会编译。有没有办法在不引入另一种泛型的情况下实现同样的目标?我目前正在使用语法 extract_body::<Value> 进行调用并希望避免对此进行调整(因为这只是一种风格问题)。

是否可以使用 where这样的语法,还是严格基于泛型的使用?我发现关于这种语法的文档非常少。

最佳答案

您可以使用type 来简化您的返回类型:

pub type ReturnType<'a, T> = Box<Future<Item = (State, T), Error = (State, HandlerError)> + 'a>;

pub fn extract_body<'a, T: 'a>(mut state: State) -> ReturnType<'a, T>
where
T: DeserializeOwned,
{
// ...
}

where 在这种情况下不能使用,为泛型类型添加约束很有用,例如当您进行静态分派(dispatch)时。

关于rust - 是否可以将函数类型从签名中移出并移到 where 子句中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49993621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com