我在Rust中有一个特别长的方法签名,在使用最新格式化程序格式化时看起来像这样(对于那些感兴趣的人,这是使用Gotham):
pub fn extract_body<'a, T: 'a>(
mut state: State,
) -> Box<Future<Item = (State, T), Error = (State, HandlerError)> + 'a>
where
T: DeserializeOwned,
{
Run Code Online (Sandbox Code Playgroud)
签名非常长,我更喜欢这样的东西:
pub fn extract_body<'a, T: 'a>(mut state: State) -> Box<F + 'a>
where
T: DeserializeOwned,
F: Future<Item = (State, T), Error = (State, HandlerError)>,
{
Run Code Online (Sandbox Code Playgroud)
注意使用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,
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
where
在这种情况下不能使用,向泛型类型添加约束很有用,例如在执行静态调度时.
归档时间: |
|
查看次数: |
108 次 |
最近记录: |