rust - 如何将一种类型传递给在 Rust 中用两种类型定义的泛型?

标签 rust

假设我有一个这样的函数:

fn my<T: fmt::Debug, U>(x: T) {
    println!("{:?}", mem::size_of::<U>());
    println!("{:?}", x);
}

这取决于两种类型TU 。我必须指定类型 U当我调用函数my时。另一方面,类型 T可以从传递的 x 确定,所以,这是合乎逻辑的,我可以在通话中错过它。

当我尝试时:

my::<u8>(10);

我收到错误:

error[E0107]: wrong number of type arguments: expected 2, found 1

让 Rust 编译器获取类型 T 的正确方法是什么?来自已通过 x并通过U仅在 <...>

最佳答案

在 Rust 中,类型位置中的 _ 用于要求编译器推断某些内容:

let foo: Vec<_> = (1..10).map(|i| i.to_string()).collect();
//           ^ collect in a vector whose type should be obvious

这也适用于您的情况:

my::<_, u8>(10);
//   ^ infer `T`

( Permalink to the playground )

关于rust - 如何将一种类型传递给在 Rust 中用两种类型定义的泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61557161/

相关文章:

rust - 评估借用的 bool 值

rust - 如果我的应用程序崩溃,我如何确保派生的子进程被终止?

rust - 为什么我不能在模式匹配时使用常量,即使它实现了 PartialEq 和 Eq?

rust - 无法构建 Hyper - crate 名称中的无效字符 `-`

mysql - 使用 mysql crate 时无法执行 MySQL 准备语句;参数未被替换

rust - `str` 是否实现 `Borrow<str>` ?

rust - #[cfg(test)] 放在 lib.rs 的顶部时会做什么?

rust - 强制迭代器返回值而不是引用(反之亦然)的正确方法是什么?

rust - 值(value)的生命周期与借用的生命周期

linux - 如何让我的程序在保持响应的同时长时间休眠?