Rust 是否可以将函数类型从签名中移到where子句中?

Rust 是否可以将函数类型从签名中移到where子句中?,rust,Rust,我在Rust中有一个特别长的方法签名,当使用最新的格式化程序进行格式化时,它看起来是这样的(对于感兴趣的人,这是使用): pub fn extract\u body( mut状态:状态, )->Box Box您可以使用类型简化您的返回类型: pub type ReturnType<'a, T> = Box<Future<Item = (State, T), Error = (State, HandlerError)> + 'a>; pub fn extrac

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

pub fn extract\u body(
mut状态:状态,

)->Box Box您可以使用
类型
简化您的返回类型:

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,
{
    // ...
}
pub类型ReturnType;

pub fn extract_body(mut state:state)->returntype就您的最后一个问题而言,我99.99%确定这不是有效使用
where
。但第一个问题可能仍然有答案(有没有办法达到同样的效果)。我建议你在操场上创造一个新的环境,降低潜在答案的门槛。此外,您是否尝试过将
F
放在通用符号列表中?您的代码的问题是,除了缺少通用符号
F
之外,
Box@MatthieuM. 我不能提供一个“完整”的示例,因为我不知道我要写的内容的正确语法:)这是OP。第一个建议提出了一个警告,即在类型别名中忽略了
泛型边界,这可能是一个问题;至于第二个建议,它将
F
误认为是一种特质,而事实并非如此。@ljedrz
Future
不是特质?在这种情况下,我将删除我答案的第二部分。顺便说一句,我删除了警告。编译器希望
F
是基于返回类型签名的特征(
Box@ljedrz这就是问题所在……OP没有编写MCVE,所以我无法测试我的代码,我没有时间自己做。不。我删除了第二部分。@ljedrz:编写
并将
+'a
推入
where
子句将使
F
再次具体化。但这可能不是OP想要的,任何一个
pub fn extract_body<'a, T: 'a>(mut state: State) -> Box<F + 'a>
where
    T: DeserializeOwned,
    F: Future<Item = (State, T), Error = (State, HandlerError)>,
{
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,
{
    // ...
}