我有下面概述的复杂代码块。基本上,我需要初始化一个泛型,它始终是一个结构,并且该结构已实现Default,但是编译器仍然抱怨:
fn create<T: Default>() -> T
{
T { ..Default::default() }
}
fn main()
{
let mut x = create::<Bob>();
}
Run Code Online (Sandbox Code Playgroud)
产量:
error[E0574]: expected struct, variant or union type, found type parameter `T`
--> macro.rs:71:5
|
71 | T { ..Default::default() }
| ^ not a struct, variant or union type
error: aborting due to previous error
Run Code Online (Sandbox Code Playgroud)
有没有办法告诉锈T总是一个结构或某种东西?
谢谢,
我怀疑您能否完全执行此代码。通过使用花括号,我们告诉编译器我们初始化了一个struct。但是泛型类型不能是结构,泛型只能是具有生存期的特征。例如,您不能仅在通用代码中坚持使用结构,而是可以坚持一些要求,这就是Defaulttrait的实现。因此,在您的通用函数代码中,您唯一可以期待的就是Default特征。要使用它,您必须编写使用该特征的适当代码:
fn create<T: Default>() -> T
{
T::default()
}
Run Code Online (Sandbox Code Playgroud)
此代码将通过调用方法来使用T的Default实现default()。