我想用默认类型创建通用结构。但是Rust编译器仍然需要我在创建结构时指定显式类型。
struct A {}
struct C<T = A> {
t: Option<T>
}
fn main() {
let c = C { t: None };
}
Rust编译器显示此错误:
error[E0282]: type annotations needed for `C<T>`
--> src/main.rs:8:9
|
8 | let c = C { t: None };
| - ^ cannot infer type for `T`
| |
| consider giving `c` the explicit type `C<T>`, where the type parameter `T` is specified
如何允许我的代码用户省略通用参数?
答案 0 :(得分:5)
当您不在变量绑定中精确定义类型时(赋值的左侧),编译器必须推断出它。
这里的值不够精确(None
可以是任何值)。
一种解决方案是在绑定中声明类型。您不必为T
指定类型,如果只写C
,则将应用T
的默认类型:
let c:C = C { t: None };
值得商
请注意,在c:C
中根本没有类型推断:省略<_>
或<SomeType>
意味着将应用默认类型。