【发布时间】:2017-09-06 16:10:40
【问题描述】:
给定以下派生Default的结构Foo<T>:
#[derive(Default)]
struct Foo<T> {
bar: Option<T>,
}
为什么会编译
fn create<T>() -> Foo<T> {
Foo {
bar: Option::default(),
}
}
但这不是?
fn create_alt<T>() -> Foo<T> {
Foo::default()
}
在我看来,它们都在做完全相同的事情——T 是否实现 Default(这是编译器要我指定的)无关紧要,因为 Option<T> 实现了 Default。
Here 是指向 Rust Playground 与此示例的链接。
【问题讨论】:
-
请注意,这发生在其他几个可自动派生的特征上,包括
Debug、Default、Clone,可能还有更多。派生实现要求所有类型参数也实现它们。