Rust 创建默认结构的最惯用方法
为了创建默认结构,我以前在Rust中看到Rust 创建默认结构的最惯用方法,rust,Rust,为了创建默认结构,我以前在Rust中看到fn new()->Self,但今天,我发现了default。因此,有两种方法可以创建默认结构: struct Point { x: i32, y: i32, } impl Point { fn new() -> Self { Point { x: 0, y: 0, } } } impl Default for Point {
fn new()->Self
,但今天,我发现了default
。因此,有两种方法可以创建默认结构:
struct Point {
x: i32,
y: i32,
}
impl Point {
fn new() -> Self {
Point {
x: 0,
y: 0,
}
}
}
impl Default for Point {
fn default() -> Self {
Point {
x: 0,
y: 0,
}
}
}
fn main() {
let _p1 = Point::new();
let _p2: Point = Default::default();
}
这样做的更好/最惯用的方法是什么?如果你必须选择一种,那么实现默认特性是更好的选择,可以让你的类型在更多的地方通用,而新的方法可能正是试图直接使用你的代码的人想要的
然而,你的问题是一个错误的二分法:你可以同时做这两件事,我鼓励你这样做!当然,重复你自己是愚蠢的,所以我会从另一个打电话给另一个(不管用哪种方式):
我在具有成员数据结构的结构中使用Default::Default()
,在这些结构中我可能会更改实现。例如,我当前可能正在使用HashMap
,但希望切换到BTreeMap
。使用Default::Default
让我少了一个更改的地方
在这种特殊情况下,您甚至可以派生默认值
,使其非常简洁:
#[derive(Default)]
struct Point {
x: i32,
y: i32,
}
impl Point {
fn new() -> Self {
Default::default()
}
}
fn main() {
let _p1 = Point::new();
let _p2: Point = Default::default();
}
我只想指出,“配置”结构有一个非常常见的模式,看起来像let config=MyConfig{option1:2,option2:None,…Default::Default()}
@WesleyWiser是的!尽管您不局限于Default::Default()
;它可以是MyStruct::new()
甚至是现有变量。
#[derive(Default)]
struct Point {
x: i32,
y: i32,
}
impl Point {
fn new() -> Self {
Default::default()
}
}
fn main() {
let _p1 = Point::new();
let _p2: Point = Default::default();
}