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 {

为了创建默认结构,我以前在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 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();
}