Rust 是否可以将函数类型从签名中移到where子句中?
我在Rust中有一个特别长的方法签名,当使用最新的格式化程序进行格式化时,它看起来是这样的(对于感兴趣的人,这是使用):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
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
误认为是一种特质,而事实并非如此。@ljedrzFuture
不是特质?在这种情况下,我将删除我答案的第二部分。顺便说一句,我删除了警告。编译器希望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,
{
// ...
}