我看了其他问题:)
如Is there a faster/shorter way to initialize variables in a Rust struct?
我也在其他帮助答案和文档中看到了这一点。但是下面与提供的模式匹配的代码无法编译。|我该怎么办?
#[derive(Default)]
pub struct Foo2 {
pub name: String,
pub test_int: i32,
}
impl Default for Foo2 {
fn default() -> Self {
Foo2 {
name: "Default Name".to_string(),
test_int: 999,
}
}
}
impl Foo2 {
pub fn print2(&self) {
println!("Print name: \"{}\" int: {}", self.name, self.test_int );
}
}
fn foo2_test() {
let f2 = Foo2 {
test_int: 1234,
..Foo2::Default::default()
};
f2.print2();
}
字符串
我得到这个错误:(我使用的是稳定版本)
error[E0119]: conflicting implementations of trait `std::default::Default` for type `Foo2`
--> src/init_test.rs:99:10
|
99 | #[derive(Default)]
| ^^^^^^^ conflicting implementation for `Foo2`
...
106 | impl Default for Foo2 {
| --------------------- first implementation here
|
= note: this error originates in the derive macro `Default` (in Nightly builds, run with -Z macro-backtrace for more info)
型
当我注解掉:
#[derive(Default)]
型
我得到另一个错误:
error[E0223]: ambiguous associated type
--> src/init_test.rs:125:11
|
125 | ..Foo2::Default::default()
| ^^^^^^^^^^^^^
|
help: if there were a trait named `Example` with associated type `Default` implemented for `Foo2`, you could use the fully-qualified path
|
125 | ..<Foo2 as Example>::Default::default()
| ~~~~~~~~~~~~~~~~~~~~~~~~~~
型
1条答案
按热度按时间h5qlskok1#
#[derive(Default)]
只在你希望编译器为你编写Default::default
函数时使用。如果你使用#[derive(Default)]
,你会得到一个编译器生成的函数,它将name
转换为空字符串,将test_int
转换为零。因为这不是你想要的,而且你提供了自己的Default
实现,所以只需删除#[derive(Default)]
行。一般来说,你要么
#[derive(...)]
一个特质,要么impl
它,但绝不能两者兼而有之。然后,要调用实现,您可以只使用类型名称。
字符串
或者你可以使用turbofish语法。
型