如何指定一种类型参数并让 Rust 推断其余的?

xNa*_*XDy 2 inference typing rust

我处于以下情况:

fn some_fn<K, T, F, S>(func: F, other_func: S) -> Vec<i64>
where
    K: SomeType<T>,
    T: SomeOtherType,
    F: Fn() -> (),
    S: Fn() -> (),
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

对于上面的示例,Rust 可以正确推断类型TFS,但不能K(如预期的那样)。

K有没有办法在调用时只指定 的类型,some_fn而不指定TFS

我当前的解决方法是将签名更改为some_fntofn some_fn<K, T, F, S>(cheat: Option<K>, func: F, other_func: S)并调用该函数,如下所示:

let cheat: Option<SomethingThatImplements> = None;
let result = some_fn(cheat, func, other_func);
Run Code Online (Sandbox Code Playgroud)

但是,我发现这非常笨拙。我无法找到有关此主题的任何内容,是否可以仅指定类型参数的一部分?

Cha*_*man 7

是的。用于_您想要推断的参数:

some_fn::<Foo, _, _, _>(...);
Run Code Online (Sandbox Code Playgroud)